项目需要根据信息类型,不同的类型放到不同的工作簿中,之前没有做过,这里记录一下;以待查阅。直接上代码
package com.ideabank.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.io.IOUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
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.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFSheet;
public class ImportBeiAnUtils {
private static Workbook workBook;
private static Sheet sheet;
private static Sheet sheet2;
public static void main(String[] args) {
String[] keys1 = new String[] { "姓名(CN)", "单位(OU)","电子邮件(EMAIL)","身份证号码(ID)","用户单位自定义(TITLE)" };
String[] keys2 = new String[] { "姓名(CN)", "单位(OU)","电子邮件(EMAIL)","身份证号码(ID)","用户单位自定义(TITLE)" };
ExcelExporter("个人证书","机构证书",keys1,keys2);
List<Map<String, Object>> datas1 = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Map data = new HashMap<>();
data.put("姓名(CN)", "姓名" + i);
data.put("单位(OU)", "单位" + i);
data.put("电子邮件(EMAIL)", "age" + i);
data.put("身份证号码(ID)", "age" + i);
data.put("用户单位自定义(TITLE)", "age" + i);
datas1.add(data);
}
List<Map<String, Object>> datas2 = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Map data = new HashMap<>();
data.put("姓名(CN)", "姓名" + i);
data.put("单位(OU)", "单位" + i);
data.put("电子邮件(EMAIL)", "age" + i);
data.put("身份证号码(ID)", "age" + i);
data.put("用户单位自定义(TITLE)", "age" + i);
datas2.add(data);
}
createTableRows(datas1,keys1, datas2,keys2);
try {
exportExcel(new FileOutputStream(new File("e:/test3.xls")),keys1,keys2);
System.out.println("成功");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void ExcelExporter(String sheetName1,String sheetName2,String[] keys1,String[] keys2) {
// 创建一个工作簿
workBook = new HSSFWorkbook();
// 创建一个工作表sheet
sheet = workBook.createSheet(sheetName1);
sheet2 = workBook.createSheet(sheetName2);
initHeader(keys1,keys2);
}
/**
* 初始化表头信息
*/
private static void initHeader(String[] keys1,String[] keys2) {
// 第一个工作簿 创建第一行
Row row = sheet.createRow(0);
row = sheet.createRow(0);
CellStyle cellStyle = workBook.createCellStyle();
for (int i = 0;i<keys1.length;i++) {
Cell cell = row.createCell(i);
cell.setCellValue(keys1[i]);
setCellStyle(cell,cellStyle);
}
// 第二个工作簿 创建第一行
Row row2 = sheet2.createRow(0);
row2 = sheet2.createRow(0);
for (int i = 0;i<keys2.length;i++) {
Cell cell2 = row2.createCell(i);
cell2.setCellValue(keys2[i]);
setCellStyle(cell2,cellStyle);
}
}
public static void mergeCell(int startRow, int endRow, int startCol, int endCol) {
CellRangeAddress region = new CellRangeAddress(startRow, endRow, startCol, endCol);
sheet.addMergedRegion(region);
}
public static void createTableRows(List<Map<String, Object>> datas1, String[] keys1,List<Map<String, Object>> datas2, String[] keys2) {
CellStyle cellStyle = workBook.createCellStyle();
//第一个工作簿写数据
for (int i = 0, length_1 = datas1.size(); i < length_1; i++) {
Map<String, Object> data = datas1.get(i);
Row row = sheet.createRow(i + 1);
Cell cell = null;
for (int j = 0, length_2 = keys1.length; j < length_2; j++) {
// 单元格获取map中的key
String key = keys1[j];
String value = MapUtils.getString(data, key, "");
cell = row.createCell(j);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(value);
setCellStyle(cell,cellStyle);
}
}
//第二个工作簿写数据
for (int i = 0, length_1 = datas2.size(); i < length_1; i++) {
Map<String, Object> data = datas2.get(i);
Row row = sheet2.createRow(i + 1);
Cell cell = null;
for (int j = 0, length_2 = keys2.length; j < length_2; j++) {
// 单元格获取map中的key
String key = keys2[j];
String value = MapUtils.getString(data, key, "");
cell = row.createCell(j);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(value);
setCellStyle(cell,cellStyle);
}
}
}
public static void setCellStyle(Cell cell,CellStyle cellStyle) {
// 设置样式
// CellStyle cellStyle = workBook.createCellStyle();
// 设置字体
Font font = workBook.createFont();
font.setFontName("宋体");
// font.setBold(true);
font.setFontHeightInPoints((short) 11);
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);
}
public static void exportExcel(OutputStream outputStream,String [] headerNames1,String [] headerNames2) {
// 导出之前先自动设置列宽
autoAllSizeColumn(headerNames1,headerNames2);
try {
workBook.write(outputStream);
} catch (IOException e) {
} finally {
IOUtils.closeQuietly(outputStream);
}
}
/**
* 根据表头自动调整列宽度
*/
public static void autoAllSizeColumn(String [] headerNames1,String [] headerNames2) {
if (sheet instanceof SXSSFSheet) {// 如果是SXSSFSheet,需要调用trackAllColumnsForAutoSizing方法一次
SXSSFSheet tmpSheet = (SXSSFSheet) sheet;
tmpSheet.trackAllColumnsForAutoSizing();
}
for (int i = 0, length = headerNames1.length; i < length; i++) {
sheet.autoSizeColumn(i);
}
if (sheet2 instanceof SXSSFSheet) {// 如果是SXSSFSheet,需要调用trackAllColumnsForAutoSizing方法一次
SXSSFSheet tmpSheet = (SXSSFSheet) sheet2;
tmpSheet.trackAllColumnsForAutoSizing();
}
for (int i = 0, length = headerNames2.length; i < length; i++) {
sheet2.autoSizeColumn(i);
}
}
}
这里是固定的两个,需要多个,不固定的,传个参数即可