需求是根据传输的数据生成个Excel,在把Excel传到别的接口,所以对格式没有太高要求,有格式要求的可以在单独搜一下相关格式。
本例中导出的为.xls,有大数据量导出需求的可以导出.xlsx,把文中HSSFWorkbook换为SXSSFWorkbook即可
一、引入maven
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
</dependency>
二、简单粗暴上代码
这里是引用util的部分,下面是util的详细内容。Map中的key是最终导出Excel的行标题,value是这一列对应的json中的字段名。
//入参headers:文档的第一行的标题
//入参jsonArray:文档内容部分
public static HSSFWorkbook ExportExcel(Map<String, String> headers, JSONArray jsonArray){
// 声明一个工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 生成一个工作表
HSSFSheet sheet = workbook.createSheet();
// 设置表格默认列宽度为20个字节
sheet.setDefaultColumnWidth((short) 20);
//单元格样式
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);//居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
HSSFDataFormat format = workbook.createDataFormat();
cellStyle.setDataFormat(format.getFormat("@"));//文本格式
// 文字样式
HSSFFont cellFont = workbook.createFont();
cellFont.setFontHeightInPoints((short) 11);//字号
cellFont.setFontName("等线");//字体
cellStyle.setFont(cellFont);
//筹备一下表头和传来的字段名
int w = 0;
String[] deatilsName = new String[headers.size()];
String[] header = new String[headers.size()];
Iterator<String> iter = headers.keySet().iterator();
while (iter.hasNext()) {
String fieldName = iter.next();
deatilsName[w] =headers.get(fieldName);
header[w] = fieldName;
w++;
}
// 遍历集合数据,产生数据行
int rowIndex = 0;
for (Object obj : jsonArray) {
if(rowIndex == 65535 || rowIndex == 0){
//如果数据超过了,则在第二页显示
if ( rowIndex != 0 ) sheet = workbook.createSheet();
HSSFRow headerRow = sheet.createRow(0); //列头
for(int t=0;t<header.length;t++) {
headerRow.createCell(t).setCellValue(header[t]);
headerRow.getCell(t).setCellStyle(cellStyle);
}
rowIndex = 1;
}
JSONObject jo = (JSONObject) JSONObject.toJSON(obj);
HSSFRow dataRow = sheet.createRow(rowIndex);
for (int b = 0; b < deatilsName.length; b++) {
HSSFCell newCell = dataRow.createCell(b);
Object o = jo.get(deatilsName[b]);
String cellValue = "";
if(o==null) cellValue = "";
else if(o instanceof Date) cellValue = new SimpleDateFormat("yyyy-mm-dd").format(o);
else cellValue = o.toString();
newCell.setCellValue(cellValue);
newCell.setCellStyle(cellStyle);
}
rowIndex++;
}
return workbook;
}
效果基本就是这样的