Kaynağa Gözat

poi 添加 纠错表头demo编写

guozx 3 yıl önce
ebeveyn
işleme
af597a4809

+ 15 - 1
application-facade/pom.xml

@@ -19,6 +19,20 @@
     <name>application-facade</name>
 
     <dependencies>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>3.9</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>3.9</version>
+        </dependency>
+
+        <!--poi 调用版本 3.9  为了支持两个版本的后缀名升级到3.9  -->
         <dependency>
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-all</artifactId>
@@ -130,4 +144,4 @@
             </plugin>
         </plugins>
     </build>
-</project>
+</project>

+ 228 - 9
application-facade/src/main/java/com/factory/controller/web/FileBlobController.java

@@ -3,6 +3,7 @@ package com.factory.controller.web;
 import com.alibaba.fastjson.JSONObject;
 import com.factory.base.entity.aggregates.ResponseBean;
 import com.factory.base.util.res.ResponseBeanBuilder;
+import com.factory.web.entity.excel.Utility;
 import com.factory.web.entity.fa.FirstArticleTitle;
 import com.factory.web.entity.pm.OnsiteTitle;
 import com.factory.web.entity.pm.OnsiteTitleBlob;
@@ -15,23 +16,38 @@ import com.factory.web.service.impl.FileServiceImpl;
 import com.factory.web.service.pm.OnsiteTitleBlobService;
 import com.factory.web.service.pm.PreventMistakeService;
 
+import com.sun.xml.internal.messaging.saaj.util.ByteInputStream;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.apache.poi.xssf.usermodel.XSSFCellStyle;
+import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
+import org.apache.poi.xssf.usermodel.XSSFDrawing;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.imageio.ImageIO;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.BufferedInputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.OutputStream;
+import java.awt.image.BufferedImage;
+import java.io.*;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
 
 
 @Api(tags = "本特勒 - 附件上传下载")
@@ -45,13 +61,12 @@ public class FileBlobController {
     private OnsiteTitleBlobService blobService;
 
     @Autowired
-	private PreventMistakeService preventMistakeService;
+    private PreventMistakeService preventMistakeService;
 
     @Autowired
     private FirstArticleService firstArticleService;
 
 
-
     @PostMapping("/addFile")
     @ApiOperation(value = "上传附件-附件参数名称file")
     public ResponseBean addFile(@RequestParam("file") MultipartFile file) throws IOException {
@@ -75,16 +90,17 @@ public class FileBlobController {
 
         long id = -1;
         if (param.getType() == 2) {
-        	OnsiteTitle onsiteTitle = preventMistakeService.getTitle(param.getPlanId());
-        	id = Long.parseLong(onsiteTitle.getUploadAttachmentId());
+            OnsiteTitle onsiteTitle = preventMistakeService.getTitle(param.getPlanId());
+            id = Long.parseLong(onsiteTitle.getUploadAttachmentId());
         } else {
-            FirstArticleTitle title=firstArticleService.getFaTitle(param.getPlanId());
+            FirstArticleTitle title = firstArticleService.getFaTitle(param.getPlanId());
             id = Long.parseLong(title.getUploadAttachmentId());
         }
 
         download(id, response);
     }
 
+
     private void download(long id, HttpServletResponse response) {
         FileEntry file = fileService.getById(id);
         byte[] buff = null;
@@ -127,6 +143,209 @@ public class FileBlobController {
         }
     }
 
+    public static void main(String[] args) throws IOException {
+//        System.out.println(LocalDate.now().getDayOfMonth());
+
+        Workbook wb = new SXSSFWorkbook(500);
+        Sheet sheet = Utility.createSheet(wb, "纠错检查");
+        XSSFCellStyle cellStyle = Utility.getTitleCellStyle(wb);
+        XSSFCellStyle cellStyleLeft = Utility.getTitleCellLeftStyle(wb,(short)10);
+
+        FileInputStream in = new FileInputStream(new File("/Users/hisoka/Downloads/ben.png"));
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        byte[] b = new byte[1024];
+        int len = -1;
+        while ((len = in.read(b)) != -1) {
+            bos.write(b, 0, len);
+        }
+        ByteArrayInputStream inb = new ByteArrayInputStream(bos.toByteArray());    //将b作为输入流;
+        BufferedImage bufferImg = ImageIO.read(inb);
+        String[] data = new String[]{"Benteler Automotive (shenyang) Co. , Ltd",
+                "Pokayoke Checking Sheet for Production",
+                "模板编号: T.0702.Eng.022.An.02\n" +
+                        "发布日期: 2020-10-26\n" +
+                        "模板版本: 11\n" +
+                        "部门:工程部\n" +
+                        "上一版本: 2019-11-01"
+        };
+        createTitle1(wb, sheet, cellStyle, 0, data, bufferImg);
+        data = new String[]{"{companyName}",
+                "{name}"
+        };
+        createTitle2(sheet, cellStyle, 1, data);
+        data = new String[]{"Production line: {productionLine}",
+                "Shift:{shift}",
+                "Setter/Jumper:{setter}",
+                "Year:{year}",
+                "Month:{month}"
+        };
+        createTitle3(sheet, cellStyle, 2, data);
+        createItemInfoTitle(sheet, cellStyle, 3);
+        data = new String[]{"点检负责人", "", ""};
+        createOperaterTitle(sheet, cellStyle, 5, data);
+
+        data=new String[]{"防错点检在每班开班后按规定频次进行,防错点检不合格,不允许进行批量生产。防错系统维修后,需重新进行防错点检;若防错短时间内无法修复,需填写特殊放行申请《0702,QM,201-2》及按照不合格品管理流程进行追溯。\n" +
+                "检查结果记录方法The Method of filling form: 符合: 打√            不符合打×, 立即通知倒班主任及维修人员,在点检表背面记录异常。"};
+        createTitle4(sheet, cellStyleLeft, 6, data);
+        data = new String[]{"Edited By: {editedBy}", "Checked By:{checkedBy}", "Approved By:{approvedBy}"};
+        createTitle5(sheet, cellStyle, 7, data);
+        FileOutputStream out = new FileOutputStream("/Users/hisoka/Downloads/1.xlsx");
+        wb.write(out);
+        out.close();
+    }
+
+    /**
+     * @param sheet
+     * @param cellStyle
+     * @param rowIndex
+     * @param data
+     */
+    private static void createTitle1(Workbook wb, Sheet sheet, XSSFCellStyle cellStyle, int rowIndex, String[] data, BufferedImage bufferImg) throws IOException {
+        Row row = sheet.createRow(rowIndex);
+        row.setHeight((short) (34 * 20));
+        CellRangeAddress cra = new CellRangeAddress(rowIndex, rowIndex, 0, 2);
+        sheet.addMergedRegion(cra);
+        cra = new CellRangeAddress(rowIndex, rowIndex, 3, 20);
+        sheet.addMergedRegion(cra);
+        cra = new CellRangeAddress(rowIndex, rowIndex + 1, 21, 27);
+        sheet.addMergedRegion(cra);
+        cra = new CellRangeAddress(rowIndex, rowIndex + 1, 28, 36);
+        sheet.addMergedRegion(cra);
+        for (int i = 0; i < 37; i++) {
+            row.createCell(i).setCellStyle(cellStyle);
+        }
+
+        Utility.addCellValForStr(row.getCell(0), data[0], cellStyle);
+        Utility.addCellValForStr(row.getCell(3), data[1], Utility.getTitleCellStyle(wb, (short) 15));
+        Utility.addCellValForStr(row.getCell(21), data[2], cellStyle);
+
+        ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
+        // 将图片写入流中
+        ImageIO.write(bufferImg, "png", byteArrayOut);
+        // 利用HSSFPatriarch将图片写入EXCEL
+        XSSFDrawing patriarch = (XSSFDrawing) sheet.createDrawingPatriarch();
+        //图片一导出到单元格B2中
+        XSSFClientAnchor anchor = new XSSFClientAnchor(10, 10, 255, 255,
+                (short) 28, 0, (short) 36, 2);
+        // 插入图片
+        patriarch.createPicture(anchor, wb.addPicture(byteArrayOut
+                .toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));
+        byteArrayOut.close();
+    }
+
+    private static void createTitle2(Sheet sheet, XSSFCellStyle cellStyle, int rowIndex, String[] data) {
+        Row row = sheet.createRow(rowIndex);
+        row.setHeight((short) (39.5 * 20));
+        CellRangeAddress cra = new CellRangeAddress(rowIndex, rowIndex, 0, 2);
+        sheet.addMergedRegion(cra);
+        cra = new CellRangeAddress(rowIndex, rowIndex, 3, 20);
+        sheet.addMergedRegion(cra);
+        for (int i = 0; i < 37; i++) {
+            row.createCell(i).setCellStyle(cellStyle);
+        }
+    }
+
+
+    private static void createTitle3(Sheet sheet, XSSFCellStyle cellStyle, int rowIndex, String[] data) {
+        Row row = sheet.createRow(rowIndex);
+        row.setHeight((short) (25.5 * 20));
+        CellRangeAddress cra = new CellRangeAddress(rowIndex, rowIndex, 0, 2);
+        sheet.addMergedRegion(cra);
+        cra = new CellRangeAddress(rowIndex, rowIndex, 3, 6);
+        sheet.addMergedRegion(cra);
+        cra = new CellRangeAddress(rowIndex, rowIndex, 7, 20);
+        sheet.addMergedRegion(cra);
+        cra = new CellRangeAddress(rowIndex, rowIndex, 21, 27);
+        sheet.addMergedRegion(cra);
+        cra = new CellRangeAddress(rowIndex, rowIndex, 28, 36);
+        sheet.addMergedRegion(cra);
+        for (int i = 0; i < 37; i++) {
+            row.createCell(i).setCellStyle(cellStyle);
+        }
+        Utility.addCellValForStr(row.getCell(0), data[0], cellStyle);
+        Utility.addCellValForStr(row.getCell(3), data[1], cellStyle);
+        Utility.addCellValForStr(row.getCell(7), data[2], cellStyle);
+        Utility.addCellValForStr(row.getCell(21), data[3], cellStyle);
+        Utility.addCellValForStr(row.getCell(28), data[4], cellStyle);
+    }
+
+    private static void createTitle4(Sheet sheet, XSSFCellStyle cellStyle, int rowIndex, String[] data) {
+        Row row = sheet.createRow(rowIndex);
+        row.setHeight((short) (33.25 * 20));
+        CellRangeAddress cra = new CellRangeAddress(rowIndex, rowIndex, 0, 36);
+        sheet.addMergedRegion(cra);
+        for (int i = 0; i < 37; i++) {
+            row.createCell(i).setCellStyle(cellStyle);
+        }
+        Utility.addCellValForStr(row.getCell(0), data[0], cellStyle);
+    }
+
+    private static void createTitle5(Sheet sheet, XSSFCellStyle cellStyle, int rowIndex, String[] data) {
+        Row row = sheet.createRow(rowIndex);
+        row.setHeight((short) (25 * 20));
+        CellRangeAddress cra = new CellRangeAddress(rowIndex, rowIndex, 0, 5);
+        sheet.addMergedRegion(cra);
+        cra = new CellRangeAddress(rowIndex, rowIndex, 6, 21);
+        sheet.addMergedRegion(cra);
+        cra = new CellRangeAddress(rowIndex, rowIndex, 22, 36);
+        sheet.addMergedRegion(cra);
+        for (int i = 0; i < 37; i++) {
+            row.createCell(i).setCellStyle(cellStyle);
+        }
+        Utility.addCellValForStr(row.getCell(0), data[0], cellStyle);
+        Utility.addCellValForStr(row.getCell(6), data[1], cellStyle);
+        Utility.addCellValForStr(row.getCell(22), data[2], cellStyle);
+    }
+
+
+    private static void createOperaterTitle(Sheet sheet, XSSFCellStyle cellStyle, int rowIndex, String[] data) {
+        Row row = sheet.createRow(rowIndex);
+        row.setHeight((short) (25 * 20));
+        CellRangeAddress cra = new CellRangeAddress(rowIndex, rowIndex, 0, 2);
+        sheet.addMergedRegion(cra);
+        cra = new CellRangeAddress(rowIndex, rowIndex, 3, 18);
+        sheet.addMergedRegion(cra);
+        cra = new CellRangeAddress(rowIndex, rowIndex, 19, 33);
+        sheet.addMergedRegion(cra);
+        cra = new CellRangeAddress(rowIndex, rowIndex, 34, 36);
+        sheet.addMergedRegion(cra);
+
+        for (int i = 0; i < 37; i++) {
+            row.createCell(i).setCellStyle(cellStyle);
+        }
+        Utility.addCellValForStr(row.getCell(0), data[0], cellStyle);
+        Utility.addCellValForStr(row.getCell(3), data[1], cellStyle);
+        Utility.addCellValForStr(row.getCell(19), data[2], cellStyle);
+    }
+
+    private static void createItemInfoTitle(Sheet sheet, XSSFCellStyle cellStyle, int rowIndex) {
+        List<String> head = new ArrayList<>();
+        HashMap<Integer, Integer> cwMap = new HashMap<>();
+        head.addAll(Arrays.asList("频次", "OP", "点检内容"));
+        cwMap.put(0, (short) 6.6 * 256);
+        cwMap.put(1, (short) 6.6 * 256);
+        cwMap.put(2, (short) 38.7 * 256);
+        for (int i = 1; i <= 31; i++) {
+            head.add(i + "");
+            cwMap.put(i + 2, (short) 4 * 256);
+        }
+        head.add("防错维修后点检");
+        cwMap.put(34, (short) 8 * 256);
+        cwMap.put(35, (short) 8 * 256);
+        cwMap.put(36, (short) 3.5 * 256);
+        CellRangeAddress cra = new CellRangeAddress(rowIndex, rowIndex, 34, 36);
+        sheet.addMergedRegion(cra);
+        Row row = sheet.createRow(rowIndex);
+        row.setHeight((short) (23.75 * 20));
+        for (int i = 0; i < head.size() + 2; i++) {
+            sheet.setColumnWidth((short) i, (short) cwMap.get(i).intValue());
+            row.createCell(i).setCellStyle(cellStyle);
+        }
+        for (int i = 0; i < head.size(); i++) {
+            Utility.addCellValForStr(row.getCell(i), head.get(i), cellStyle);
+        }
+    }
+
 //    @GetMapping("/addIniPlan")
 //    public void addIniPlan(HttpServletRequest request) {
 //

+ 102 - 102
application-facade/src/main/java/com/factory/web/entity/excel/ExcelFillCellMergeStrategy.java

@@ -1,102 +1,102 @@
-package com.factory.web.entity.excel;
-
-import com.alibaba.excel.metadata.CellData;
-import com.alibaba.excel.metadata.Head;
-import com.alibaba.excel.write.handler.CellWriteHandler;
-import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
-import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
-import lombok.Data;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.CellType;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.util.CellRangeAddress;
-
-import java.util.List;
-
-@Data
-public class ExcelFillCellMergeStrategy implements CellWriteHandler {
-	/**
-	 * 合并字段的下标
-	 */
-	private int[] mergeColumnIndex;
-	/**
-	 * 合并几行
-	 */
-	private int mergeRowIndex;
-
-	public ExcelFillCellMergeStrategy() {
-	}
-
-	public ExcelFillCellMergeStrategy(int mergeRowIndex, int[] mergeColumnIndex) {
-		this.mergeRowIndex = mergeRowIndex;
-		this.mergeColumnIndex = mergeColumnIndex;
-	}
-
-	@Override
-	public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row,
-                                 Head head, Integer integer, Integer integer1, Boolean aBoolean) {
-
-	}
-
-	@Override
-	public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell,
-                                Head head, Integer integer, Boolean aBoolean) {
-
-	}
-
-	@Override
-	public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
-                                       CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) {
-
-	}
-
-	@Override
-	public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
-                                 List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
-//当前行
-		int curRowIndex = cell.getRowIndex();
-		//当前列
-		int curColIndex = cell.getColumnIndex();
-
-		if (curRowIndex > mergeRowIndex) {
-			for (int i = 0; i < mergeColumnIndex.length; i++) {
-				if (curColIndex == mergeColumnIndex[i]) {
-					mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex);
-					break;
-				}
-			}
-		}
-	}
-
-	private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex) {
-		//获取当前行的当前列的数据和上一行的当前列列数据,通过上一行数据是否相同进行合并
-		Object curData = cell.getCellTypeEnum() == CellType.STRING ? cell.getStringCellValue() :
-				cell.getNumericCellValue();
-		Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex);
-		Object preData = preCell.getCellTypeEnum() == CellType.STRING ? preCell.getStringCellValue() : preCell.getNumericCellValue();
-		// 比较当前行的第一列的单元格与上一行是否相同,相同合并当前单元格与上一行
-		//
-		if (curData.equals(preData)) {
-			Sheet sheet = writeSheetHolder.getSheet();
-			List<CellRangeAddress> mergeRegions = sheet.getMergedRegions();
-			boolean isMerged = false;
-			for (int i = 0; i < mergeRegions.size() && !isMerged; i++) {
-				CellRangeAddress cellRangeAddr = mergeRegions.get(i);
-				// 若上一个单元格已经被合并,则先移出原有的合并单元,再重新添加合并单元
-				if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) {
-					sheet.removeMergedRegion(i);
-					cellRangeAddr.setLastRow(curRowIndex);
-					sheet.addMergedRegion(cellRangeAddr);
-					isMerged = true;
-				}
-			}
-			// 若上一个单元格未被合并,则新增合并单元
-			if (!isMerged) {
-				CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex,
-						curColIndex);
-				sheet.addMergedRegion(cellRangeAddress);
-			}
-		}
-	}
-}
+//package com.factory.web.entity.excel;
+//
+//import com.alibaba.excel.metadata.CellData;
+//import com.alibaba.excel.metadata.Head;
+//import com.alibaba.excel.write.handler.CellWriteHandler;
+//import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+//import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
+//import lombok.Data;
+//import org.apache.poi.ss.usermodel.Cell;
+//import org.apache.poi.ss.usermodel.CellType;
+//import org.apache.poi.ss.usermodel.Row;
+//import org.apache.poi.ss.usermodel.Sheet;
+//import org.apache.poi.ss.util.CellRangeAddress;
+//
+//import java.util.List;
+//
+//@Data
+//public class ExcelFillCellMergeStrategy implements CellWriteHandler {
+//	/**
+//	 * 合并字段的下标
+//	 */
+//	private int[] mergeColumnIndex;
+//	/**
+//	 * 合并几行
+//	 */
+//	private int mergeRowIndex;
+//
+//	public ExcelFillCellMergeStrategy() {
+//	}
+//
+//	public ExcelFillCellMergeStrategy(int mergeRowIndex, int[] mergeColumnIndex) {
+//		this.mergeRowIndex = mergeRowIndex;
+//		this.mergeColumnIndex = mergeColumnIndex;
+//	}
+//
+//	@Override
+//	public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row,
+//                                 Head head, Integer integer, Integer integer1, Boolean aBoolean) {
+//
+//	}
+//
+//	@Override
+//	public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell,
+//                                Head head, Integer integer, Boolean aBoolean) {
+//
+//	}
+//
+//	@Override
+//	public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
+//                                       CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) {
+//
+//	}
+//
+//	@Override
+//	public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
+//                                 List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
+////当前行
+//		int curRowIndex = cell.getRowIndex();
+//		//当前列
+//		int curColIndex = cell.getColumnIndex();
+//
+//		if (curRowIndex > mergeRowIndex) {
+//			for (int i = 0; i < mergeColumnIndex.length; i++) {
+//				if (curColIndex == mergeColumnIndex[i]) {
+//					mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex);
+//					break;
+//				}
+//			}
+//		}
+//	}
+//
+//	private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex) {
+//		//获取当前行的当前列的数据和上一行的当前列列数据,通过上一行数据是否相同进行合并
+//		Object curData = cell.getCellTypeEnum() == CellType.STRING ? cell.getStringCellValue() :
+//				cell.getNumericCellValue();
+//		Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex);
+//		Object preData = preCell.getCellTypeEnum() == CellType.STRING ? preCell.getStringCellValue() : preCell.getNumericCellValue();
+//		// 比较当前行的第一列的单元格与上一行是否相同,相同合并当前单元格与上一行
+//		//
+//		if (curData.equals(preData)) {
+//			Sheet sheet = writeSheetHolder.getSheet();
+//			List<CellRangeAddress> mergeRegions = sheet.getMergedRegions();
+//			boolean isMerged = false;
+//			for (int i = 0; i < mergeRegions.size() && !isMerged; i++) {
+//				CellRangeAddress cellRangeAddr = mergeRegions.get(i);
+//				// 若上一个单元格已经被合并,则先移出原有的合并单元,再重新添加合并单元
+//				if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) {
+//					sheet.removeMergedRegion(i);
+//					cellRangeAddr.setLastRow(curRowIndex);
+//					sheet.addMergedRegion(cellRangeAddr);
+//					isMerged = true;
+//				}
+//			}
+//			// 若上一个单元格未被合并,则新增合并单元
+//			if (!isMerged) {
+//				CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex,
+//						curColIndex);
+//				sheet.addMergedRegion(cellRangeAddress);
+//			}
+//		}
+//	}
+//}

+ 94 - 0
application-facade/src/main/java/com/factory/web/entity/excel/Utility.java

@@ -0,0 +1,94 @@
+package com.factory.web.entity.excel;
+
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;
+import org.apache.poi.hssf.usermodel.HSSFFont;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFCellStyle;
+import org.apache.poi.xssf.usermodel.XSSFColor;
+import org.apache.poi.xssf.usermodel.XSSFFont;
+
+import java.awt.*;
+
+public class Utility {
+
+    /**
+     * 设置单元格样式
+     *
+     * @param wb
+     * @param isTitle
+     * @return
+     */
+    public static XSSFCellStyle getTitleCellStyle(Workbook wb) {
+        XSSFCellStyle cellStyle = (XSSFCellStyle) wb.createCellStyle();
+        XSSFFont font = (XSSFFont) wb.createFont();
+        font.setFontHeightInPoints((short) 10);
+        cellStyle.setFont(font);//选择需要用到的字体格式
+        cellStyle.setWrapText(true);
+        //设置边框:
+        cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
+        cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
+        cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
+        cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
+        //设置居中:
+        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中
+        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
+
+        return cellStyle;
+    }
+
+    public static XSSFCellStyle getTitleCellStyle(Workbook wb, short fontSize) {
+        XSSFCellStyle cellStyle = (XSSFCellStyle) wb.createCellStyle();
+
+        XSSFFont font = (XSSFFont) wb.createFont();
+        font.setFontHeightInPoints((short) fontSize);
+        cellStyle.setFont(font);//选择需要用到的字体格式
+
+        cellStyle.setWrapText(true);
+        //设置边框:
+        cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
+        cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
+        cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
+        cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
+        //设置居中:
+        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中
+        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
+
+        return cellStyle;
+    }
+
+    public static XSSFCellStyle getTitleCellLeftStyle(Workbook wb, short fontSize) {
+        XSSFCellStyle cellStyle = (XSSFCellStyle) wb.createCellStyle();
+
+        XSSFFont font = (XSSFFont) wb.createFont();
+        font.setFontHeightInPoints((short) fontSize);
+        cellStyle.setFont(font);//选择需要用到的字体格式
+
+        cellStyle.setWrapText(true);
+        //设置边框:
+        cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
+        cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
+        cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
+        cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
+        //设置居中:
+        cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); // 左边
+        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
+
+        return cellStyle;
+    }
+
+
+    public static Sheet createSheet(Workbook wb, String name) {
+        Sheet sheet = wb.createSheet(name);
+        return sheet;
+    }
+
+
+    public static void addCellValForStr(Cell cell, String value, XSSFCellStyle style) {
+        cell.setCellValue(value != null ? value : "");
+        cell.setCellStyle(style);
+    }
+
+
+}

+ 2 - 2
application-facade/src/main/java/com/factory/web/service/impl/ini/BentelerIniVersionServiceImpl.java

@@ -27,7 +27,7 @@ import com.factory.base.util.res.ResponseBeanBuilder;
 import com.factory.user.entity.vo.res.FileRes;
 import com.factory.user.service.CommonService;
 import com.factory.user.service.UserInfoService;
-import com.factory.web.entity.excel.ExcelFillCellMergeStrategy;
+//import com.factory.web.entity.excel.ExcelFillCellMergeStrategy;
 import com.factory.web.entity.excel.FillData;
 import com.factory.web.entity.excel.TestFileUtil;
 import com.factory.web.entity.vo.req.pad.GetVersionCheckItemReq;
@@ -774,7 +774,7 @@ public class BentelerIniVersionServiceImpl extends ServiceImpl<BentelerIniVersio
         // 这里 会填充到第一个sheet, 然后文件流会自动关闭
         int[] a = {6};
         ExcelWriter excelWriter = EasyExcel.write(tempFile, FillData.class)
-                .registerWriteHandler(new ExcelFillCellMergeStrategy(5, a))
+//                .registerWriteHandler(new ExcelFillCellMergeStrategy(5, a))
                 .withTemplate(templateFileName).build();
         WriteSheet writeSheet = EasyExcel.writerSheet().build();
         //新一行