Maven
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version><!--$NO-MVN-MAN-VER$ -->
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.14</version><!--$NO-MVN-MAN-VER$ -->
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version><!--$NO-MVN-MAN-VER$ -->
</dependency>
導入:
package com.pan.test;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ImportExcel {
public static void main(String[] args) throws Exception {
ImportExcel importExcel = new ImportExcel();
FileInputStream inputStream = new FileInputStream("C:\\Users\\prg48\\Desktop\\入選名單表.xls");
String suffix = "xls";
int startRow = 0;
List<String[]> strings = importExcel.paresExcel(inputStream,suffix,startRow);
strings.stream().forEach(s -> {
if (s!=null) {
Arrays.stream(s).forEach(ss -> {
if (ss != null) {
System.out.print(ss.toString());
}
System.out.print(" ");
});
System.out.println();
}
});
}
/**
* 解析文件的方法
* @param inputStream
* @param suffix
* @param startRow
* @return List<String[]>
*/
public List<String[]> paresExcel(InputStream inputStream, String suffix, int startRow) throws Exception {
//1.定義Excel對象變量
Workbook workbook = null;
//2.判斷後綴 決定解析方式
if ("xls".equals(suffix)) {
//2003
workbook = new HSSFWorkbook(inputStream);
} else if ("xlsx".equals(suffix)) {
//2007
workbook = new XSSFWorkbook(inputStream);
}else{
//未知內容
}
//判斷
if (workbook == null) {
return null;
}
//獲取工作表sheet
Sheet sheet = workbook.getSheetAt(0);
if (sheet == null) {
//空表格
return null;
}
//獲取表格最後一行 行號
int lastRowNum = sheet.getLastRowNum();
//判斷行號
if (lastRowNum <= startRow) {
return null;
}
List<String[]> result = new ArrayList<>();
//定義行變量和單元格變量
Row row = null;
Cell cell = null;
//循環讀取
for (int rowNum = startRow; rowNum < lastRowNum; rowNum++){
row = sheet.getRow(rowNum);
//獲取當前行的第一列和最後一列的標記
short firstCellNum = row.getFirstCellNum();
short lastCellNum = row.getLastCellNum();
if(lastCellNum!=0){
String[] rowArray = new String[lastCellNum];
for (int cellNum = firstCellNum; cellNum < lastCellNum; cellNum++){
cell = row.getCell(cellNum);
if (cell == null) {
rowArray[cellNum] = null;
}else {
rowArray[cellNum] = parseCell(cell);
}
}
result.add(rowArray);
}
}
return result;
}
/**
* 解析單元格字符串
* @return String
*/
private String parseCell(Cell cell){
String cellStr = null;
switch (cell.getCellType()){
case XSSFCell.CELL_TYPE_STRING:
cellStr = cell.getStringCellValue();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
cellStr = cell.getNumericCellValue()+"";
break;
case XSSFCell.CELL_TYPE_BLANK:
cellStr = null;
break;
default:
cellStr = "";
}
return cellStr;
}
}
導出:
package com.pan.test;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;
public class ExportExcel {
public static void main(String[] args) throws Exception {
ImportExcel importExcel = new ImportExcel();
FileInputStream inputStream = new FileInputStream("C:\\Users\\prg48\\Desktop\\入選名單表.xls");
String suffix = "xls";
int startRow = 0;
List<String[]> strings = importExcel.paresExcel(inputStream,suffix,startRow);
ExportExcel exportExcel = new ExportExcel();
FileOutputStream outputStream = new FileOutputStream("C:\\Users\\prg48\\Desktop\\test.xls");
exportExcel.exportExcel(strings,outputStream);
}
/**
* 文件導出方法
* @param resource
* @param outputStream
*/
public void exportExcel(List<String[]> resource, OutputStream outputStream) throws Exception {
//創建Excel對象
HSSFWorkbook workbook = new HSSFWorkbook();
//創建一個表格
HSSFSheet sheet = workbook.createSheet("sheet1");
//創建表頭
String[] headerStr = resource.get(0);
HSSFRow headerRow = sheet.createRow(0);
for (int i=0; i<headerStr.length; i++) {
//設置列寬
sheet.setColumnWidth(i,5000);
}
//設置表頭單元格樣式
HSSFCellStyle headerStyle = workbook.createCellStyle();
//水平居中
headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//設置字體
HSSFFont headerFont = workbook.createFont();
headerFont.setColor(HSSFColor.VIOLET.index);
headerFont.setFontName("楷體");
headerStyle.setFont(headerFont);
//表頭內容
for (int i = 0; i<headerStr.length; i++){
//創建一個單元格
HSSFCell headerCell = headerRow.createCell(i);
headerCell.setCellStyle(headerStyle);
headerCell.setCellValue(headerStr[i]);
}
//表體內容
//設置表體單元格樣式
HSSFCellStyle bodyStyle = workbook.createCellStyle();
//水平居中
bodyStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//設置字體
HSSFFont bodyFont = workbook.createFont();
bodyFont.setColor(HSSFColor.BLUE.index);
bodyFont.setFontName("宋體");
bodyStyle.setFont(bodyFont);
for(int row = 1; row<resource.size(); row++){
//輸出行數據
String[] temp = resource.get(row);
//創建行
HSSFRow bodyRow = sheet.createRow(row);
//循環創建列
for(int cell = 0; cell<temp.length; cell++){
HSSFCell bodyCell1 = bodyRow.createCell(cell);
bodyCell1.setCellStyle(bodyStyle);
bodyCell1.setCellValue(temp[cell]);
}
}
//將Excel輸出到文件
workbook.write(outputStream);
}
}