|
@@ -0,0 +1,380 @@
|
|
|
+package com.jeeplus.modules.sg.financial.settlement.util;
|
|
|
+
|
|
|
+
|
|
|
+import com.jeeplus.modules.sg.financial.settlement.entity.MaintainData;
|
|
|
+import org.apache.poi.hssf.util.HSSFColor;
|
|
|
+import org.apache.poi.ss.usermodel.*;
|
|
|
+import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * Description: 生成Excel并写入数据
|
|
|
+ */
|
|
|
+public class ExcelWriter {
|
|
|
+
|
|
|
+ public static Map<String, CellStyle> styles;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成Excel并写入数据信息
|
|
|
+ * @param dataList 数据列表
|
|
|
+ * @return 写入数据后的工作簿对象
|
|
|
+ */
|
|
|
+ public static Workbook exportData(List<MaintainData> dataList){
|
|
|
+ // 生成xlsx的Excel
|
|
|
+ Workbook workbook = new SXSSFWorkbook();
|
|
|
+
|
|
|
+
|
|
|
+ // 生成Sheet表,写入第一行的列头
|
|
|
+ Sheet sheet = buildDataSheet(workbook);
|
|
|
+ //构建每行的数据内容
|
|
|
+ int rowNum = 3;
|
|
|
+ for (Iterator<MaintainData> it = dataList.iterator(); it.hasNext(); ) {
|
|
|
+ MaintainData data = it.next();
|
|
|
+ if (data == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //输出行数据
|
|
|
+ Row row = sheet.createRow(rowNum++);
|
|
|
+ convertDataToRow(data, row);
|
|
|
+ }
|
|
|
+ return workbook;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成sheet表,并写入第一行数据(列头)
|
|
|
+ * @param workbook 工作簿对象
|
|
|
+ * @return 已经写入列头的Sheet
|
|
|
+ */
|
|
|
+ private static Sheet buildDataSheet(Workbook workbook) {
|
|
|
+ Sheet sheet = workbook.createSheet();
|
|
|
+ // 设置列头宽度
|
|
|
+// for (int i=0; i<CELL_HEADS.size(); i++) {
|
|
|
+// sheet.setColumnWidth(i, 4000);
|
|
|
+// }
|
|
|
+ // 设置默认行高
|
|
|
+ sheet.setDefaultRowHeight((short) 400);
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(2, 0, 0, 0));
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(2, 0, 1, 1));
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(2, 0, 2, 2));
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(2, 0, 3, 3));
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(0, 0, 4, 13));
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(2, 1, 4, 4));
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(2, 1, 5, 5));
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(2, 1, 6, 6));
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(2, 1, 7, 7));
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(1, 1, 8, 13));
|
|
|
+ // 构建头单元格样式
|
|
|
+ styles = createStyles(sheet.getWorkbook());
|
|
|
+ CellStyle cellStyle = buildHeadCellStyle(sheet.getWorkbook());
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // 写入第一行各列的数据
|
|
|
+ Row row1 = sheet.createRow(0);
|
|
|
+ Row row2 = sheet.createRow(1);
|
|
|
+ Row row3 = sheet.createRow(2);
|
|
|
+ Cell cell1 = row1.createCell(0);
|
|
|
+ cell1.setCellValue("项目定义编码");
|
|
|
+ cell1.setCellStyle(styles.get("header"));
|
|
|
+ Cell cell2 = row1.createCell(1);
|
|
|
+ cell2.setCellValue("开工时间");
|
|
|
+ cell2.setCellStyle(styles.get("header"));
|
|
|
+ Cell cell3 = row1.createCell(2);
|
|
|
+ cell3.setCellValue("竣工时间");
|
|
|
+ cell3.setCellStyle(styles.get("header"));
|
|
|
+ Cell cell4 = row1.createCell(3);
|
|
|
+ cell4.setCellValue("批准文号");
|
|
|
+ cell4.setCellStyle(styles.get("header"));
|
|
|
+
|
|
|
+
|
|
|
+ Cell cella = row2.createCell(0);
|
|
|
+ cella.setCellValue("");
|
|
|
+ cella.setCellStyle(styles.get("header"));
|
|
|
+ Cell cellb = row2.createCell(1);
|
|
|
+ cellb.setCellValue("");
|
|
|
+ cellb.setCellStyle(styles.get("header"));
|
|
|
+ Cell cellc = row2.createCell(2);
|
|
|
+ cellc.setCellValue("");
|
|
|
+ cellc.setCellStyle(styles.get("header"));
|
|
|
+ Cell celld = row2.createCell(3);
|
|
|
+ celld.setCellValue("");
|
|
|
+ celld.setCellStyle(styles.get("header"));
|
|
|
+
|
|
|
+ Cell cellm = row2.createCell(9);
|
|
|
+ cellm.setCellValue("");
|
|
|
+ cellm.setCellStyle(styles.get("header"));
|
|
|
+ Cell celln = row2.createCell(10);
|
|
|
+ celln.setCellValue("");
|
|
|
+ celln.setCellStyle(styles.get("header"));
|
|
|
+ Cell cello = row2.createCell(11);
|
|
|
+ cello.setCellValue("");
|
|
|
+ cello.setCellStyle(styles.get("header"));
|
|
|
+ Cell cellp = row2.createCell(12);
|
|
|
+ cellp.setCellValue("");
|
|
|
+ cellp.setCellStyle(styles.get("header"));
|
|
|
+ Cell cellq = row2.createCell(13);
|
|
|
+ cellq.setCellValue("");
|
|
|
+ cellq.setCellStyle(styles.get("header"));
|
|
|
+
|
|
|
+ Cell celle = row3.createCell(0);
|
|
|
+ celle.setCellValue("");
|
|
|
+ celle.setCellStyle(styles.get("header"));
|
|
|
+ Cell cellf = row3.createCell(1);
|
|
|
+ cellf.setCellValue("");
|
|
|
+ cellf.setCellStyle(styles.get("header"));
|
|
|
+ Cell cellg = row3.createCell(2);
|
|
|
+ cellg.setCellValue("");
|
|
|
+ cellg.setCellStyle(styles.get("header"));
|
|
|
+ Cell cellh = row3.createCell(3);
|
|
|
+ cellh.setCellValue("");
|
|
|
+ cellh.setCellStyle(styles.get("header"));
|
|
|
+
|
|
|
+ Cell cell5 = row1.createCell(4);
|
|
|
+ cell5.setCellValue("概算数");
|
|
|
+ cell5.setCellStyle(styles.get("header"));
|
|
|
+ Cell cell6 = row2.createCell(4);
|
|
|
+ cell6.setCellValue("建筑费");
|
|
|
+ cell6.setCellStyle(styles.get("header"));
|
|
|
+ Cell cell7 = row2.createCell(5);
|
|
|
+ cell7.setCellValue("安装费");
|
|
|
+ cell7.setCellStyle(styles.get("header"));
|
|
|
+ Cell cell8 = row2.createCell(6);
|
|
|
+ cell8.setCellValue("设备购置费");
|
|
|
+ cell8.setCellStyle(styles.get("header"));
|
|
|
+
|
|
|
+ Cell cellj = row3.createCell(4);
|
|
|
+ cellj.setCellValue("");
|
|
|
+ cellj.setCellStyle(styles.get("header"));
|
|
|
+ Cell cellk = row3.createCell(5);
|
|
|
+ cellk.setCellValue("");
|
|
|
+ cellk.setCellStyle(styles.get("header"));
|
|
|
+ Cell celll = row3.createCell(6);
|
|
|
+ celll.setCellValue("");
|
|
|
+ celll.setCellStyle(styles.get("header"));
|
|
|
+
|
|
|
+ Cell cell9 = row2.createCell(7);
|
|
|
+ cell9.setCellValue("主材费");
|
|
|
+ cell9.setCellStyle(styles.get("header"));
|
|
|
+ Cell cell10 = row2.createCell(8);
|
|
|
+ cell10.setCellValue("其他费用");
|
|
|
+ cell10.setCellStyle(styles.get("header"));
|
|
|
+ Cell cell11 = row3.createCell(8);
|
|
|
+ cell11.setCellValue("设计费");
|
|
|
+ cell11.setCellStyle(styles.get("header"));
|
|
|
+ Cell cell12 = row3.createCell(9);
|
|
|
+ cell12.setCellValue("监理费");
|
|
|
+ cell12.setCellStyle(styles.get("header"));
|
|
|
+ Cell cell13 = row3.createCell(10);
|
|
|
+ cell13.setCellValue("项目前期工作费");
|
|
|
+ cell13.setCellStyle(styles.get("header"));
|
|
|
+ Cell cell14 = row3.createCell(11);
|
|
|
+ cell14.setCellValue("线路施工赔偿费");
|
|
|
+ cell14.setCellStyle(styles.get("header"));
|
|
|
+ Cell cell15 = row3.createCell(12);
|
|
|
+ cell15.setCellValue("法人管理费(余物清理费)");
|
|
|
+ cell15.setCellStyle(styles.get("header"));
|
|
|
+ Cell cell16 = row3.createCell(13);
|
|
|
+ cell16.setCellValue("合计");
|
|
|
+ cell16.setCellStyle(styles.get("header"));
|
|
|
+ return sheet;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置第一行列头的样式
|
|
|
+ * @param workbook 工作簿对象
|
|
|
+ * @return 单元格样式对象
|
|
|
+ */
|
|
|
+ private static CellStyle buildHeadCellStyle(Workbook workbook) {
|
|
|
+ CellStyle style = workbook.createCellStyle();
|
|
|
+ //对齐方式设置
|
|
|
+ style.setAlignment(CellStyle.ALIGN_CENTER);
|
|
|
+ //边框颜色和宽度设置
|
|
|
+// style.setBorderBottom(CellStyle.THIN);
|
|
|
+ style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); // 下边框
|
|
|
+ style.setBorderLeft(CellStyle.BORDER_THIN);
|
|
|
+ style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); // 左边框
|
|
|
+ style.setBorderRight(CellStyle.BORDER_THIN);
|
|
|
+ style.setRightBorderColor(IndexedColors.BLACK.getIndex()); // 右边框
|
|
|
+ style.setBorderTop(CellStyle.BORDER_THIN);
|
|
|
+ style.setTopBorderColor(IndexedColors.BLACK.getIndex()); // 上边框
|
|
|
+ //设置背景颜色
|
|
|
+// style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
|
|
|
+// style.setFillPattern(CellStyle.SOLID_FOREGROUND);
|
|
|
+ return style;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static Map<String, CellStyle> createStyles(Workbook wb) {
|
|
|
+ Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
|
|
|
+
|
|
|
+ CellStyle style = wb.createCellStyle();
|
|
|
+ style.setAlignment(CellStyle.ALIGN_CENTER);
|
|
|
+ style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
|
|
|
+ Font titleFont = wb.createFont();
|
|
|
+ titleFont.setFontName("Arial");
|
|
|
+ titleFont.setFontHeightInPoints((short) 16);
|
|
|
+ titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
|
|
|
+ style.setFont(titleFont);
|
|
|
+ styles.put("title", style);
|
|
|
+
|
|
|
+ style = wb.createCellStyle();
|
|
|
+ style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
|
|
|
+ style.setBorderRight(CellStyle.BORDER_THIN);
|
|
|
+ style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
|
|
|
+ style.setBorderLeft(CellStyle.BORDER_THIN);
|
|
|
+ style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
|
|
|
+ style.setBorderTop(CellStyle.BORDER_THIN);
|
|
|
+ style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
|
|
|
+ style.setBorderBottom(CellStyle.BORDER_THIN);
|
|
|
+ style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
|
|
|
+ Font dataFont = wb.createFont();
|
|
|
+ dataFont.setFontName("Arial");
|
|
|
+ dataFont.setFontHeightInPoints((short) 10);
|
|
|
+ style.setFont(dataFont);
|
|
|
+ styles.put("data", style);
|
|
|
+
|
|
|
+ style = wb.createCellStyle();
|
|
|
+ style.cloneStyleFrom(styles.get("data"));
|
|
|
+ style.setAlignment(CellStyle.ALIGN_LEFT);
|
|
|
+ styles.put("data1", style);
|
|
|
+
|
|
|
+ style = wb.createCellStyle();
|
|
|
+ style.cloneStyleFrom(styles.get("data"));
|
|
|
+ style.setAlignment(CellStyle.ALIGN_CENTER);
|
|
|
+ styles.put("data2", style);
|
|
|
+
|
|
|
+ style = wb.createCellStyle();
|
|
|
+ style.cloneStyleFrom(styles.get("data"));
|
|
|
+ style.setAlignment(CellStyle.ALIGN_RIGHT);
|
|
|
+ styles.put("data3", style);
|
|
|
+
|
|
|
+ style = wb.createCellStyle();
|
|
|
+ style.cloneStyleFrom(styles.get("data"));
|
|
|
+// style.setWrapText(true);
|
|
|
+ style.setAlignment(CellStyle.ALIGN_CENTER);
|
|
|
+ style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
|
|
|
+ style.setFillPattern(CellStyle.SOLID_FOREGROUND);
|
|
|
+ Font headerFont = wb.createFont();
|
|
|
+ headerFont.setFontName("Arial");
|
|
|
+ headerFont.setFontHeightInPoints((short) 10);
|
|
|
+ headerFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
|
|
|
+ headerFont.setColor(IndexedColors.BLACK.getIndex());
|
|
|
+ style.setFont(headerFont);
|
|
|
+ style.setFillForegroundColor(HSSFColor.WHITE.index);
|
|
|
+ styles.put("header", style);
|
|
|
+
|
|
|
+ return styles;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将数据转换成行
|
|
|
+ * @param row 行对象
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static void convertDataToRow(MaintainData maintainData, Row row){
|
|
|
+ int cellNum = 0;
|
|
|
+ Cell cell;
|
|
|
+ cell = row.createCell(cellNum++);
|
|
|
+ cell.setCellStyle(styles.get("data"));
|
|
|
+ if (null != maintainData.getProjectId()) {
|
|
|
+ cell.setCellValue(maintainData.getProjectId());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+ cell = row.createCell(cellNum++);
|
|
|
+ cell.setCellStyle(styles.get("data"));
|
|
|
+ if (null != maintainData.getStartDate()) {
|
|
|
+ cell.setCellValue(maintainData.getStartDate());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+ cell = row.createCell(cellNum++);
|
|
|
+ cell.setCellStyle(styles.get("data"));
|
|
|
+ if (null != maintainData.getEndDate()) {
|
|
|
+ cell.setCellValue(maintainData.getEndDate());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+ cell = row.createCell(cellNum++);
|
|
|
+ cell.setCellStyle(styles.get("data"));
|
|
|
+ if (null != maintainData.getApprovalNumber()) {
|
|
|
+ cell.setCellValue(maintainData.getApprovalNumber());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+ cell = row.createCell(cellNum++);
|
|
|
+ cell.setCellStyle(styles.get("data"));
|
|
|
+ if (null != maintainData.getBuildingFee()) {
|
|
|
+ cell.setCellValue(maintainData.getBuildingFee());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+ cell = row.createCell(cellNum++);
|
|
|
+ cell.setCellStyle(styles.get("data"));
|
|
|
+ if (null != maintainData.getInstallFee()) {
|
|
|
+ cell.setCellValue(maintainData.getInstallFee());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+
|
|
|
+ cell = row.createCell(cellNum++);
|
|
|
+ cell.setCellStyle(styles.get("data"));
|
|
|
+ if (null != maintainData.getEquipmentFee()) {
|
|
|
+ cell.setCellValue(maintainData.getEquipmentFee());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+ cell = row.createCell(cellNum++);
|
|
|
+ cell.setCellStyle(styles.get("data"));
|
|
|
+ if (null != maintainData.getMaterialFee()) {
|
|
|
+ cell.setCellValue(maintainData.getMaterialFee());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+ cell = row.createCell(cellNum++);
|
|
|
+ cell.setCellStyle(styles.get("data"));
|
|
|
+ if (null != maintainData.getDesignFee()) {
|
|
|
+ cell.setCellValue(maintainData.getDesignFee());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+ cell = row.createCell(cellNum++);
|
|
|
+ cell.setCellStyle(styles.get("data"));
|
|
|
+ if (null != maintainData.getSupervisionFee()) {
|
|
|
+ cell.setCellValue(maintainData.getSupervisionFee());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+ cell = row.createCell(cellNum++);
|
|
|
+ cell.setCellStyle(styles.get("data"));
|
|
|
+ if (null != maintainData.getPreliminaryWorkFee()) {
|
|
|
+ cell.setCellValue(maintainData.getPreliminaryWorkFee());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+ cell = row.createCell(cellNum++);
|
|
|
+ cell.setCellStyle(styles.get("data"));
|
|
|
+ if (null != maintainData.getDamages()) {
|
|
|
+ cell.setCellValue(maintainData.getDamages());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+ cell = row.createCell(cellNum++);
|
|
|
+ cell.setCellStyle(styles.get("data"));
|
|
|
+ if (null != maintainData.getManagementFee()) {
|
|
|
+ cell.setCellValue(maintainData.getManagementFee());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+ cell = row.createCell(cellNum++);
|
|
|
+ cell.setCellStyle(styles.get("data"));
|
|
|
+ if (null != maintainData.getTotalFee()) {
|
|
|
+ cell.setCellValue(maintainData.getTotalFee());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|