You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
3.5 KiB

7 years ago
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;
7 years ago
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<String> 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<String>)oneRowData, row);
} else {
addOneRowOfDataToExcel(oneRowData, row);
}
}
}