我们有很多软件可以创建表格,但是使用java语言来创建表格几乎是每个程序员必备的技能!因为你永远不知道什么时候什么地点你的老大会让你做这个需求!所以建议收藏!
/**
* 计算明细导出excel
*
* @param response 响应头
* @param id 结算汇总id
*/
@RequestMapping("downloadExcel")
public void caseSettlementExcel(HttpServletResponse response, String id) {
try {
//根据多个id值来查询需要加入表格中的记录的详细信息;
List<String> idList = Arrays.asList(id.split(","));
List<CaseSettlementSummary> caseSettlementSummaries = new ArrayList<>();
for (int i = 0; i < idList.size(); i++) {
CaseSettlementSummary settlementSummary = summaryDAO.selectSettlementSummaryById(idList.get(i));
caseSettlementSummaries.add(settlementSummary);
}
//设置表格的标题
String exportFileName = String.format("打标任务结算-%s%s", new Date(), ".xls");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(exportFileName, "UTF-8"));
initProcAndAct();
Workbook workbook = new HSSFWorkbook();
CellStyle cellStyle = workbook.createCellStyle();
//设置单元格的水平对齐类型
cellStyle.setAlignment(ALIGN_CENTER);
//设置单元格的垂直对齐类型
cellStyle.setVerticalAlignment(VERTICAL_CENTER);
//设置表格的高度,具体根据记录数增长
int height = 0;
//为此工作簿创建新工作表并返回高级表示形式。
//使用此选项创建新图纸。
Sheet sheet = workbook.createSheet("任务结算");
//在该工作簿中创建行
Row row = sheet.createRow(height);
List<String> SHEET_HEADER = new ArrayList<>(8)
SHEET_HEADER.add("任务类型");
SHEET_HEADER.add("任务流程");
SHEET_HEADER.add("表单");
SHEET_HEADER.add("用户名");
SHEET_HEADER.add("数量");
SHEET_HEADER.add("单价(单位:元)");
SHEET_HEADER.add("总价(单位:元)");
for (int i = 0; i < SHEET_HEADER.size(); i++) {
//创建表头
ExcelUtils.setCellValue(row, cellStyle, SHEET_HEADER.get(i), i);
}
height++;
int countSum = 0;
double priceSum = 0;
for (int i = 0; i < idList.size(); i++) {
List<CaseSettlementDetail> detailList = detailDAO.listSettlementDetailBySummaryId(idList.get(i), 0);
for (CaseSettlementDetail detail : detailList) {
//单行数据 任务类型-流程-表单-用户-数量-单价-总价
Row recordRow = sheet.createRow(height);
//向单元格中放值
ExcelUtils.setCellValue(recordRow, cellStyle, procMap.get(detail.getProcDefKey()), 0);
ExcelUtils.setCellValue(recordRow, cellStyle, actMap.get(detail.getActId()), 1);
ExcelUtils.setCellValue(recordRow, cellStyle, formMap.get(detail.getFormId()), 2);
ExcelUtils.setCellValue(recordRow, cellStyle, detail.getOwner(), 3);
ExcelUtils.setCellValue(recordRow, cellStyle, detail.getNum(), 4);
countSum = countSum + detail.getNum();
ExcelUtils.setCellValue(recordRow, cellStyle, detail.getUnitPrice().doubleValue(), 5);
ExcelUtils.setCellValue(recordRow, cellStyle, detail.getTotalPrice().doubleValue(), 6);
priceSum = priceSum + detail.getTotalPrice().doubleValue();
//行+1
height++;
}
}
//合计信息
row = sheet.createRow(height);
ExcelUtils.setCellValue(row, cellStyle, "合计", 0);
ExcelUtils.setCellValue(row, cellStyle, countSum, 4);
ExcelUtils.setCellValue(row, cellStyle, priceSum, 6);
//放入输出流中
workbook.write(response.getOutputStream());
} catch (Exception e) {
logger.error("caseSettlementExcel error , message : {} ", e.getMessage(), e);
}
}
代码存在不足,请多多指教!