package com.ky.sdn.fk.common.util;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ExcelWriteUtil {
/**
* 创建新excel.
*
* @param fileDir
* excel的路径
* @param sheetName
* 要创建的表格索引
* @param titleRow
* excel的第一行即表格头
*/
public static void createExcel(String fileDir, String sheetName1, String titleRow1[], String sheetName2, String titleRow2[], String sheetName3, String titleRow3[]) throws Exception {
// 创建workbook
HSSFWorkbook workbook = new HSSFWorkbook();
// 添加Worksheet(不添加sheet时生成的xls文件打开时会报错)
HSSFSheet sheet1 = workbook.createSheet(sheetName1);
HSSFSheet sheet2 = workbook.createSheet(sheetName2);
HSSFSheet sheet3 = workbook.createSheet(sheetName3);
sheet1.setColumnWidth(0, 4000);
sheet1.setColumnWidth(1, 4000);
sheet2.setColumnWidth(0, 4000);
sheet3.setColumnWidth(0, 4000*3);
sheet3.setColumnWidth(1, 4000*2);
sheet3.setColumnWidth(2, 4000);
sheet3.setColumnWidth(3, 4000);
sheet3.setColumnWidth(4, 4000);
sheet3.setColumnWidth(5, 4000);
// 新建文件
FileOutputStream out = null;
try {
// 添加表头
HSSFRow row1 = workbook.getSheet(sheetName1).createRow(0); // 创建第一行
for (short i = 0; i < titleRow1.length; i++) {
HSSFCell cell1 = row1.createCell(i);
cell1.setCellValue(titleRow1[i]);
}
HSSFRow row2 = workbook.getSheet(sheetName2).createRow(0); // 创建第一行
for (short i = 0; i < titleRow2.length; i++) {
HSSFCell cell2 = row2.createCell(i);
cell2.setCellValue(titleRow2[i]);
}
HSSFRow row3 = workbook.getSheet(sheetName3).createRow(0); // 创建第一行
for (short i = 0; i < titleRow3.length; i++) {
HSSFCell cell3 = row3.createCell(i);
cell3.setCellValue(titleRow3[i]);
}
out = new FileOutputStream(fileDir);
workbook.write(out);
} catch (Exception e) {
throw e;
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 往excel中写入(已存在的数据无法写入).
*
* @param fileDir
* 文件路径
* @param sheetName
* 表格索引
* @param object
* @throws Exception
*/
public static void writeToExcel(String fileDir, String sheetName, List<Map> mapList) throws Exception {
// 创建workbook
HSSFWorkbook workbook = null;
File file = new File(fileDir);
try {
workbook = new HSSFWorkbook(new FileInputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 流
FileOutputStream out = null;
HSSFSheet sheet = workbook.getSheet(sheetName);
System.out.println(sheet.getSheetName());
// 获取表格的总行数
// int rowCount = sheet.getLastRowNum() + 1; // 需要加一
// 获取表头的列数
int columnCount = sheet.getRow(0).getLastCellNum();
try {
// 获得表头行对象
HSSFRow titleRow = sheet.getRow(0);
if (titleRow != null) {
for (int rowId = 0; rowId < mapList.size(); rowId++) {
Map map = mapList.get(rowId);
HSSFRow newRow = sheet.createRow(rowId + 1);
for (short columnIndex = 0; columnIndex < columnCount; columnIndex++) { // 遍历表头
String mapKey = titleRow.getCell(columnIndex).toString().trim();
HSSFCell cell = newRow.createCell(columnIndex);
cell.setCellValue(map.get(mapKey) == null ? null : map.get(mapKey).toString());
}
}
}
out = new FileOutputStream(fileDir);
workbook.write(out);
} catch (Exception e) {
throw e;
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.14</version>
</dependency>