package com.alibaba.excel.write; import java.io.IOException; import java.io.OutputStream; import java.util.List; import com.alibaba.excel.write.context.GenerateContext; import com.alibaba.excel.write.context.GenerateContextImpl; import com.alibaba.excel.metadata.ExcelColumnProperty; import com.alibaba.excel.metadata.Sheet; import com.alibaba.excel.metadata.Table; import com.alibaba.excel.support.ExcelTypeEnum; import com.alibaba.excel.util.EasyExcelTempFile; import org.apache.commons.beanutils.BeanUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; /** * @author jipengfei */ public class ExcelBuilderImpl implements ExcelBuilder { private GenerateContext context; public void init(OutputStream out, ExcelTypeEnum excelType, boolean needHead) { //初始化时候创建临时缓存目录,用于规避POI在并发写bug EasyExcelTempFile.createPOIFilesDirectory(); context = new GenerateContextImpl(out, excelType, needHead); } public void addContent(List data) { if (data != null && data.size() > 0) { int rowNum = context.getCurrentSheet().getLastRowNum(); if (rowNum == 0) { Row row = context.getCurrentSheet().getRow(0); if(row ==null) { if (context.getExcelHeadProperty() == null || !context.needHead()) { rowNum = -1; } } } for (int i = 0; i < data.size(); i++) { int n = i + rowNum + 1; addOneRowOfDataToExcel(data.get(i), n); } } } public void addContent(List data, Sheet sheetParam) { context.buildCurrentSheet(sheetParam); addContent(data); } public void addContent(List data, Sheet sheetParam, Table table) { context.buildCurrentSheet(sheetParam); context.buildTable(table); addContent(data); } public void finish() { try { context.getWorkbook().write(context.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } } private void addOneRowOfDataToExcel(List oneRowData, Row row) { if (oneRowData != null && oneRowData.size() > 0) { for (int i = 0; i < oneRowData.size(); i++) { Cell cell = row.createCell(i); cell.setCellStyle(context.getCurrentContentStyle()); cell.setCellValue(oneRowData.get(i)); } } } private void addOneRowOfDataToExcel(Object oneRowData, Row row) { int i = 0; for (ExcelColumnProperty excelHeadProperty : context.getExcelHeadProperty().getColumnPropertyList()) { Cell cell = row.createCell(i); cell.setCellStyle(context.getCurrentContentStyle()); String cellValue = null; try { cellValue = BeanUtils.getProperty(oneRowData, excelHeadProperty.getField().getName()); } catch (Exception e) { e.printStackTrace(); } if (cellValue != null) { cell.setCellValue(cellValue); } else { cell.setCellValue(""); } i++; } } private void addOneRowOfDataToExcel(Object oneRowData, int n) { Row row = context.getCurrentSheet().createRow(n); if (oneRowData instanceof List) { addOneRowOfDataToExcel((List)oneRowData, row); } else { addOneRowOfDataToExcel(oneRowData, row); } } }