import org.apache.poi.ss.usermodel.Sheet; //导入方法依赖的package包/类
private int buildGridExcelData(ReportGrid gridModel, Sheet sheet, int starDataRow, Map styles) {
CellStyle dataAlignLeftStyle = styles.get(GridStyleType.dataAlignLeftStyle.name());
CellStyle dataAlignCenterStyle = styles.get(GridStyleType.dataAlignCenterStyle.name());
CellStyle dataAlignRightStyle = styles.get(GridStyleType.dataAlignRightStyle.name());
IFillCellInterceptor interceptor = ContextHolder.getBean(IFillCellInterceptor.BEAN_ID);
List bottomGridExcelHeader = new ArrayList();
this.calculateBottomColumnHeader(gridModel.getGridHeaderModelList(), bottomGridExcelHeader);
List> excelDatas = gridModel.getGridDataModel().getDatas();
String treeColumn = gridModel.getGridDataModel().getTreeColumn();
int excelDataIndex = 0;
int rowSize = excelDatas.size();
Cell cell;
Row row;
for (int rowNum = starDataRow; rowNum <= starDataRow + rowSize - 1; rowNum++) {
row = sheet.createRow(rowNum);
Map map = excelDatas.get(excelDataIndex);
int j = 0;
for (ReportGridHeader header : bottomGridExcelHeader) {
Object value = map.get(header.getColumnName());
int dataAlign = header.getDataAlign();
cell = row.createCell(j);
if (dataAlign == 1) {
cell.setCellStyle(dataAlignCenterStyle);
} else if (dataAlign == 2) {
cell.setCellStyle(dataAlignRightStyle);
} else {
cell.setCellStyle(dataAlignLeftStyle);
}
if (value != null) {
if (header.getColumnName().equalsIgnoreCase(treeColumn)) {
int level = this.calculateIndentationCount(value.toString());
cell.setCellStyle(new GridStyleBuilder().createIndentationCellStyle(sheet.getWorkbook(), level == 0 ? 0 : level * 2));
cell.setCellValue(value.toString());
} else {
if (value instanceof BigDecimal || value instanceof Float || value instanceof Double){
CellStyle style = cell.getCellStyle();
DataFormat format = sheet.getWorkbook().createDataFormat();
String displayFormat = header.getDisplayFormat();
if (StringUtils.isEmpty(displayFormat))
style.setDataFormat(format.getFormat("#,##0.00"));
else
style.setDataFormat(format.getFormat(displayFormat));
cell.setCellStyle(style);
}
interceptor.fillCellValue(sheet, row, cell, value);
}
} else {
cell.setCellValue("");
}
sheet.setColumnWidth(cell.getColumnIndex(), header.getWidth() / 6 > 255 ? 254 * 256 : header.getWidth() / 6 * 256);
j++;
}
excelDataIndex++;
}
return starDataRow + rowSize;
}