From 437ef769eedcc38a348ff6bbc7a9242b128474c9 Mon Sep 17 00:00:00 2001 From: "492273770@qq.com" Date: Tue, 26 Apr 2022 10:37:21 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=BE=AA=E7=8E=AF?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0${each.classScoreList[i].className}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../github/chimmhuang/excel/ExcelHelper.java | 323 ++++++++++-------- .../chimmhuang/excel/tablemodel/Picture.java | 179 ++++++++++ .../excel/tablemodel/PictureType.java | 30 ++ .../excel/tablemodel/SheetTable.java | 33 +- .../github/chimmhuang/excel/demo/Demo.java | 130 +++---- src/test/resources/demo1.xlsx | Bin 0 -> 13613 bytes 6 files changed, 481 insertions(+), 214 deletions(-) create mode 100644 src/main/java/com/github/chimmhuang/excel/tablemodel/Picture.java create mode 100644 src/main/java/com/github/chimmhuang/excel/tablemodel/PictureType.java create mode 100644 src/test/resources/demo1.xlsx diff --git a/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java b/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java index d2c83c9..064c8c3 100644 --- a/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java +++ b/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java @@ -38,18 +38,16 @@ import java.lang.reflect.Method; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.Calendar; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; /** * @author Chimm Huang */ public class ExcelHelper { - private ExcelHelper() { } + private ExcelHelper() { + } private static final char[] COL_SET = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; @@ -95,7 +93,7 @@ public class ExcelHelper { * 获取 sheet 页的表格信息 * get the sheet table with index 0 * - * @param bytes excel binary file + * @param bytes excel binary file */ public static SheetTable getSheetTable(byte[] bytes) throws IOException { return getSheetTable(bytes, 0); @@ -136,30 +134,59 @@ public class ExcelHelper { */ public static void fillInData(SheetTable table, Object data) { - DataVariableParserVisitor visitor = new DataVariableParserVisitor(data); + DataVariableParserVisitor visitor = new DataVariableParserVisitor(data); + + Map rowMap = new ConcurrentHashMap<>(); + + for (Cell cell : table) { + Object value = cell.getValue(); + if (value instanceof String && ((String) value).startsWith("${each.")) { + rowMap.put(cell.getRow(), value.toString().split("\\.")[1].replace("[i]", "")); + break; + } + } + + rowMap.keySet().stream() + .forEach(key -> { + List scoreList = (List) ((HashMap) data).get(rowMap.get(key)); + Row row13 = table.getRow(key); + + List rowList = new ArrayList<>(); + for (int i = 0; i < scoreList.size(); i++) { + Row copy = row13.copy(); + int finalI = i; + copy.getColCellMap().entrySet().forEach(key1 -> { + copy.getCell(key1.getKey()).setValue(key1.getValue().getValue().toString().replace("each.","").replace("[i]", "["+ finalI+"]")); + }); + rowList.add(copy); + } - for (Cell cell : table) { - Object value = cell.getValue(); - CellType cellType = cell.getCellType(); + table.insertRow(key, rowList); + }); - if (cellType.equals(CellType.FORMULA) && value != null) { - // insert formula - VariableParserLexer lexer = new VariableParserLexer(CharStreams.fromString(value.toString())); - CommonTokenStream tokens = new CommonTokenStream(lexer); + for (Cell cell : table) { + Object value = cell.getValue(); + CellType cellType = cell.getCellType(); - // syntax analysis - VariableParserParser parser = new VariableParserParser(tokens); + if (cellType.equals(CellType.FORMULA) && value != null) { + // insert formula + VariableParserLexer lexer = new VariableParserLexer(CharStreams.fromString(value.toString())); + CommonTokenStream tokens = new CommonTokenStream(lexer); - String newFormula = (String) parser.expr().accept(visitor); + // syntax analysis + VariableParserParser parser = new VariableParserParser(tokens); - cell.setFormula(newFormula); - } else if (value instanceof String && ((String) value).startsWith("$")) { - // insert value - Object propValue = parseCellVariable(data, (String) value); - cell.setValue(propValue); - } - } - } + String newFormula = (String) parser.expr().accept(visitor); + + cell.setFormula(newFormula); + + } else if (value instanceof String && ((String) value).startsWith("$") && !((String) value).startsWith("${each.")) { + // insert value + Object propValue = parseCellVariable(data, (String) value); + cell.setValue(propValue); + } + } + } /** * 将 sheet 对象转换为 excel 二进制文件 @@ -271,75 +298,75 @@ public class ExcelHelper { } - try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) { - // convert xssfWorkbook to binary file - xssfWorkbook.setForceFormulaRecalculation(true); - xssfWorkbook.write(bos); - return bos.toByteArray(); - } catch (IOException e) { - throw new ConvertException(e); - } - } - - /** - * 转换 cellStyle 对象为 Apache poi 的对象 convert {@link CellStyle} to - * {@link org.apache.poi.ss.usermodel.CellStyle} - */ - private static org.apache.poi.ss.usermodel.CellStyle toExcelCellStyle(XSSFWorkbook xssfWorkbook, - CellStyle cellStyle) { - XSSFCellStyle xssfCellStyle = xssfWorkbook.createCellStyle(); - - xssfCellStyle.setBorderTop(cellStyle.getBorderTopEnum()); - xssfCellStyle.setBorderBottom(cellStyle.getBorderBottomEnum()); - xssfCellStyle.setBorderLeft(cellStyle.getBorderLeftEnum()); - xssfCellStyle.setBorderRight(cellStyle.getBorderRightEnum()); - - xssfCellStyle.setTopBorderColor(cellStyle.getTopBorderColor()); - xssfCellStyle.setBottomBorderColor(cellStyle.getBottomBorderColor()); - xssfCellStyle.setLeftBorderColor(cellStyle.getLeftBorderColor()); - xssfCellStyle.setRightBorderColor(cellStyle.getRightBorderColor()); - - xssfCellStyle.setFillBackgroundColor(cellStyle.getFillBackgroundXSSFColor()); - xssfCellStyle.setFillForegroundColor(cellStyle.getFillForegroundXSSFColor()); - xssfCellStyle.setFillPattern(cellStyle.getFillPattern()); - - xssfCellStyle.setDataFormat(cellStyle.getDataFormat()); - xssfCellStyle.setHidden(cellStyle.getHidden()); - xssfCellStyle.setLocked(cellStyle.getLocked()); - - xssfCellStyle.setIndention(cellStyle.getIndention()); - xssfCellStyle.setWrapText(cellStyle.getWrapText()); - xssfCellStyle.setShrinkToFit(cellStyle.getShrinkToFit()); - xssfCellStyle.setReadingOrder(cellStyle.getReadingOrder()); - xssfCellStyle.setQuotePrefixed(cellStyle.getQuotePrefixed()); - xssfCellStyle.setRotation(cellStyle.getRotation()); - - xssfCellStyle.setAlignment(cellStyle.getAlignmentEnum()); - xssfCellStyle.setVerticalAlignment(cellStyle.getVerticalAlignmentEnum()); - - Font font = cellStyle.getFont(); - if (font != null) { - XSSFFont xssfFont = xssfWorkbook.createFont(); - - xssfFont.setBold(font.getBold()); - xssfFont.setCharSet(font.getCharSet()); - xssfFont.setColor(font.getColor()); - xssfFont.setFamily(font.getFamily()); - xssfFont.setFontHeight(font.getFontHeight()); - xssfFont.setFontHeightInPoints(font.getFontHeightInPoints()); - xssfFont.setFontName(font.getFontName()); - xssfFont.setItalic(font.getItalic()); - xssfFont.setScheme(font.getScheme()); - xssfFont.setStrikeout(font.getStrikeout()); - xssfFont.setThemeColor(font.getThemeColor()); - xssfFont.setTypeOffset(font.getTypeOffset()); - xssfFont.setUnderline(font.getUnderline()); - - xssfCellStyle.setFont(xssfFont); - } - - return xssfCellStyle; - } + try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) { + // convert xssfWorkbook to binary file + xssfWorkbook.setForceFormulaRecalculation(true); + xssfWorkbook.write(bos); + return bos.toByteArray(); + } catch (IOException e) { + throw new ConvertException(e); + } + } + + /** + * 转换 cellStyle 对象为 Apache poi 的对象 convert {@link CellStyle} to + * {@link org.apache.poi.ss.usermodel.CellStyle} + */ + private static org.apache.poi.ss.usermodel.CellStyle toExcelCellStyle(XSSFWorkbook xssfWorkbook, + CellStyle cellStyle) { + XSSFCellStyle xssfCellStyle = xssfWorkbook.createCellStyle(); + + xssfCellStyle.setBorderTop(cellStyle.getBorderTopEnum()); + xssfCellStyle.setBorderBottom(cellStyle.getBorderBottomEnum()); + xssfCellStyle.setBorderLeft(cellStyle.getBorderLeftEnum()); + xssfCellStyle.setBorderRight(cellStyle.getBorderRightEnum()); + + xssfCellStyle.setTopBorderColor(cellStyle.getTopBorderColor()); + xssfCellStyle.setBottomBorderColor(cellStyle.getBottomBorderColor()); + xssfCellStyle.setLeftBorderColor(cellStyle.getLeftBorderColor()); + xssfCellStyle.setRightBorderColor(cellStyle.getRightBorderColor()); + + xssfCellStyle.setFillBackgroundColor(cellStyle.getFillBackgroundXSSFColor()); + xssfCellStyle.setFillForegroundColor(cellStyle.getFillForegroundXSSFColor()); + xssfCellStyle.setFillPattern(cellStyle.getFillPattern()); + + xssfCellStyle.setDataFormat(cellStyle.getDataFormat()); + xssfCellStyle.setHidden(cellStyle.getHidden()); + xssfCellStyle.setLocked(cellStyle.getLocked()); + + xssfCellStyle.setIndention(cellStyle.getIndention()); + xssfCellStyle.setWrapText(cellStyle.getWrapText()); + xssfCellStyle.setShrinkToFit(cellStyle.getShrinkToFit()); + xssfCellStyle.setReadingOrder(cellStyle.getReadingOrder()); + xssfCellStyle.setQuotePrefixed(cellStyle.getQuotePrefixed()); + xssfCellStyle.setRotation(cellStyle.getRotation()); + + xssfCellStyle.setAlignment(cellStyle.getAlignmentEnum()); + xssfCellStyle.setVerticalAlignment(cellStyle.getVerticalAlignmentEnum()); + + Font font = cellStyle.getFont(); + if (font != null) { + XSSFFont xssfFont = xssfWorkbook.createFont(); + + xssfFont.setBold(font.getBold()); + xssfFont.setCharSet(font.getCharSet()); + xssfFont.setColor(font.getColor()); + xssfFont.setFamily(font.getFamily()); + xssfFont.setFontHeight(font.getFontHeight()); + xssfFont.setFontHeightInPoints(font.getFontHeightInPoints()); + xssfFont.setFontName(font.getFontName()); + xssfFont.setItalic(font.getItalic()); + xssfFont.setScheme(font.getScheme()); + xssfFont.setStrikeout(font.getStrikeout()); + xssfFont.setThemeColor(font.getThemeColor()); + xssfFont.setTypeOffset(font.getTypeOffset()); + xssfFont.setUnderline(font.getUnderline()); + + xssfCellStyle.setFont(xssfFont); + } + + return xssfCellStyle; + } /** * 获取 XSSFRow 对象,若不存在,则创建一个 @@ -371,35 +398,35 @@ public class ExcelHelper { VariableParserLexer lexer = new VariableParserLexer(CharStreams.fromString(cellVariableName)); CommonTokenStream tokens = new CommonTokenStream(lexer); - // syntax analysis - VariableParserParser parser = new VariableParserParser(tokens); - - Object propValue = data; - for (VariableContext variableContext : parser.variableExpr().variable()) { - String variableName = variableContext.IDENTIFIER().getText(); - propValue = getPropValue(propValue, variableName); - if (propValue == null) { - return null; - } - - // if the prop instanceof List, then get the value under a specific index. - List arrayIdxContexts = variableContext.arrayIdx(); - for (ArrayIdxContext arrayIdxContext : arrayIdxContexts) { - int index = Integer.parseInt(arrayIdxContext.NUMBER().getSymbol().getText()); - if (propValue instanceof List) { - List propValueList = (List) propValue; + // syntax analysis + VariableParserParser parser = new VariableParserParser(tokens); + + Object propValue = data; + for (VariableContext variableContext : parser.variableExpr().variable()) { + String variableName = variableContext.IDENTIFIER().getText(); + propValue = getPropValue(propValue, variableName); + if (propValue == null) { + return null; + } + + // if the prop instanceof List, then get the value under a specific index. + List arrayIdxContexts = variableContext.arrayIdx(); + for (ArrayIdxContext arrayIdxContext : arrayIdxContexts) { + int index = Integer.parseInt(arrayIdxContext.NUMBER().getSymbol().getText()); + if (propValue instanceof List) { + List propValueList = (List) propValue; try { propValue = propValueList.get(index); } catch (IndexOutOfBoundsException e) { propValue = null; } - } else { - throw new IllegalArgumentException(propValue.getClass().getName() + "must be List."); - } - } - } - return propValue; - } + } else { + throw new IllegalArgumentException(propValue.getClass().getName() + "must be List."); + } + } + } + return propValue; + } /** * 获取表格数据对应变量的值 @@ -413,33 +440,33 @@ public class ExcelHelper { */ private static Object getPropValue(Object obj, String propName) { - if (obj == null || propName == null) { - return null; - } - - if (obj instanceof Map) { - Map mapObj = (Map) obj; - return mapObj.get(propName); - } - - Field declaredField = null; - try { - declaredField = obj.getClass().getDeclaredField(propName); - } catch (NoSuchFieldException e) { - // try to get the parent class - try { - declaredField = obj.getClass().getSuperclass().getDeclaredField(propName); - } catch (NoSuchFieldException noSuchFieldException) { - throw new ReflectionException(noSuchFieldException); - } - } - - try { - PropertyDescriptor pd = new PropertyDescriptor(declaredField.getName(), obj.getClass()); - Method method = pd.getReadMethod(); - return method.invoke(obj); - } catch (Exception e) { - throw new InvokeMethodException(e); - } - } + if (obj == null || propName == null) { + return null; + } + + if (obj instanceof Map) { + Map mapObj = (Map) obj; + return mapObj.get(propName); + } + + Field declaredField = null; + try { + declaredField = obj.getClass().getDeclaredField(propName); + } catch (NoSuchFieldException e) { + // try to get the parent class + try { + declaredField = obj.getClass().getSuperclass().getDeclaredField(propName); + } catch (NoSuchFieldException noSuchFieldException) { + throw new ReflectionException(noSuchFieldException); + } + } + + try { + PropertyDescriptor pd = new PropertyDescriptor(declaredField.getName(), obj.getClass()); + Method method = pd.getReadMethod(); + return method.invoke(obj); + } catch (Exception e) { + throw new InvokeMethodException(e); + } + } } diff --git a/src/main/java/com/github/chimmhuang/excel/tablemodel/Picture.java b/src/main/java/com/github/chimmhuang/excel/tablemodel/Picture.java new file mode 100644 index 0000000..4723c4e --- /dev/null +++ b/src/main/java/com/github/chimmhuang/excel/tablemodel/Picture.java @@ -0,0 +1,179 @@ +package com.github.chimmhuang.excel.tablemodel; + +import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType; + +import java.io.Serializable; + +/** + * @author Chimm Huang + */ +public class Picture implements Serializable { + + private static final long serialVersionUID = -2649347083856941587L; + + private final byte[] pictureByte; + private final PictureType type; + + /** + * horizontal pixels + */ + private int pixelX; + /** + * vertical pixels + */ + private int pixelY; + + /** + * see {@link AnchorType} + */ + private AnchorType anchortype; + + /** + see {@link org.apache.poi.xssf.usermodel.XSSFClientAnchor#XSSFClientAnchor(int, int, int, int, int, int, int, int)} + dx1 – the x coordinate within the first cell. + dy1 – the y coordinate within the first cell. + dx2 – the x coordinate within the second cell. + dy2 – the y coordinate within the second cell. + */ + private int dx1 = 0; + private int dy1 = 0; + private int dx2 = 0; + private int dy2 = 0; + + /** + * start from 1. + */ + private int firstRowNum; + private int lastRowNum; + + /** + * start from "A" + */ + private String firstColName; + private String lastColName; + + public Picture(byte[] pictureByte, PictureType type, int pixelX, int pixelY, int firstRowNum, int lastRowNum, String firstColName, String lastColName) { + this.pictureByte = pictureByte; + this.type = type; + this.pixelX = pixelX; + this.pixelY = pixelY; + this.firstRowNum = firstRowNum; + this.lastRowNum = lastRowNum; + this.firstColName = firstColName; + this.lastColName = lastColName; + } + + public Picture(byte[] pictureByte, PictureType type, int pixelX, int pixelY, int firstRowNum, int lastRowNum, String firstColName, String lastColName, int dx1, int dy1, int dx2, int dy2) { + this(pictureByte, type, pixelX, pixelY, firstRowNum, lastRowNum, firstColName, lastColName); + this.dx1 = dx1; + this.dy1 = dy1; + this.dx2 = dx2; + this.dy2 = dy2; + } + + public Picture(byte[] pictureByte, PictureType type, int pixelX, int pixelY, int firstRowNum, int lastRowNum, String firstColName, String lastColName, AnchorType anchortype) { + this(pictureByte, type, pixelX, pixelY, firstRowNum, lastRowNum, firstColName, lastColName); + this.anchortype = anchortype; + } + + public Picture(byte[] pictureByte, PictureType type, int pixelX, int pixelY, int firstRowNum, int lastRowNum, String firstColName, String lastColName, int dx1, int dy1, int dx2, int dy2, AnchorType anchortype) { + this(pictureByte, type, pixelX, pixelY, firstRowNum, lastRowNum, firstColName, lastColName, dx1, dy1, dx2, dy2); + this.anchortype = anchortype; + } + + public int getDx1() { + return dx1; + } + + public void setDx1(int dx1) { + this.dx1 = dx1; + } + + public int getDy1() { + return dy1; + } + + public void setDy1(int dy1) { + this.dy1 = dy1; + } + + public int getDx2() { + return dx2; + } + + public void setDx2(int dx2) { + this.dx2 = dx2; + } + + public int getDy2() { + return dy2; + } + + public void setDy2(int dy2) { + this.dy2 = dy2; + } + + public int getFirstRowNum() { + return firstRowNum; + } + + public void setFirstRowNum(int firstRowNum) { + this.firstRowNum = firstRowNum; + } + + public int getLastRowNum() { + return lastRowNum; + } + + public void setLastRowNum(int lastRowNum) { + this.lastRowNum = lastRowNum; + } + + public String getFirstColName() { + return firstColName; + } + + public void setFirstColName(String firstColName) { + this.firstColName = firstColName; + } + + public String getLastColName() { + return lastColName; + } + + public void setLastColName(String lastColName) { + this.lastColName = lastColName; + } + + public byte[] getPictureByte() { + return pictureByte; + } + + public PictureType getType() { + return type; + } + + public AnchorType getAnchortype() { + return anchortype; + } + + public void setAnchortype(AnchorType anchortype) { + this.anchortype = anchortype; + } + + public int getPixelX() { + return pixelX; + } + + public void setPixelX(int pixelX) { + this.pixelX = pixelX; + } + + public int getPixelY() { + return pixelY; + } + + public void setPixelY(int pixelY) { + this.pixelY = pixelY; + } +} diff --git a/src/main/java/com/github/chimmhuang/excel/tablemodel/PictureType.java b/src/main/java/com/github/chimmhuang/excel/tablemodel/PictureType.java new file mode 100644 index 0000000..fb02eac --- /dev/null +++ b/src/main/java/com/github/chimmhuang/excel/tablemodel/PictureType.java @@ -0,0 +1,30 @@ +package com.github.chimmhuang.excel.tablemodel; + +import org.apache.poi.ss.usermodel.Workbook; + +/** + * @author Chimm Huang + */ +public enum PictureType { + + /** + * see {@link Workbook} + */ + EMF(Workbook.PICTURE_TYPE_EMF), + WMF(Workbook.PICTURE_TYPE_WMF), + PICT(Workbook.PICTURE_TYPE_PICT), + JPEG(Workbook.PICTURE_TYPE_JPEG), + PNG(Workbook.PICTURE_TYPE_PNG), + DIB(Workbook.PICTURE_TYPE_DIB) + ; + + private final int type; + + PictureType(int type) { + this.type = type; + } + + public int type() { + return type; + } +} diff --git a/src/main/java/com/github/chimmhuang/excel/tablemodel/SheetTable.java b/src/main/java/com/github/chimmhuang/excel/tablemodel/SheetTable.java index 866261e..a15c985 100644 --- a/src/main/java/com/github/chimmhuang/excel/tablemodel/SheetTable.java +++ b/src/main/java/com/github/chimmhuang/excel/tablemodel/SheetTable.java @@ -16,9 +16,7 @@ import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFSheet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -75,6 +73,12 @@ public class SheetTable implements Iterable { */ private final Pattern numberMatch = Pattern.compile("\\d+"); + /** + * 图片列表 + * picture list + */ + private final List pictureList = new ArrayList<>(); + public SheetTable(XSSFSheet xssfSheet) { List mergedRegions = xssfSheet.getMergedRegions(); @@ -199,6 +203,28 @@ public class SheetTable implements Iterable { lastRowNum = rowNum - 1; } + public void insertRow(int rowNum, List rows) { + Map copyMap = new ConcurrentHashMap<>(); + rowMap.keySet().stream() + .filter(key -> key >= rowNum) + .forEach(key -> { + if(key > rowNum){ + copyMap.put(key, rowMap.get(key)); + } + rowMap.remove(key); + }); + lastRowNum = rowNum - 1; + + rows.stream().forEach(row -> { + appendRow(row); + }); + + copyMap.keySet().stream() + .forEach(key -> { + appendRow(copyMap.get(key)); + }); + } + /** * 在表格最后添加一行 * append a row at the end @@ -383,4 +409,5 @@ public class SheetTable implements Iterable { }); }); } + } diff --git a/src/test/java/com/github/chimmhuang/excel/demo/Demo.java b/src/test/java/com/github/chimmhuang/excel/demo/Demo.java index 85ca028..9e987c3 100644 --- a/src/test/java/com/github/chimmhuang/excel/demo/Demo.java +++ b/src/test/java/com/github/chimmhuang/excel/demo/Demo.java @@ -17,9 +17,7 @@ import javax.swing.filechooser.FileSystemView; import java.io.File; import java.io.FileOutputStream; import java.math.BigDecimal; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; import java.util.stream.Collectors; @@ -32,7 +30,7 @@ public class Demo { public void testFillInTable() throws Exception { // 获取 excel 二进制文件 - File file = new File("src/test/resources/demo.xlsx"); + File file = new File("C:\\Users\\49227\\Downloads\\chimm.excel-master\\src\\test\\resources\\demo1.xlsx"); byte[] bytes = FileUtils.readFileToByteArray(file); // 创建 table 对象 @@ -42,15 +40,18 @@ public class Demo { // 设置 自定义 sheet 页名称 table.setSheetName("成绩表"); + Map mapData = new HashMap<>(); + mapData.put("title", "中学成绩单"); + // 定义 excel 表格数据 - SchoolReportData tableData = new SchoolReportData(); +// SchoolReportData tableData = new SchoolReportData(); /* ==================================== 开始组装表格数据 ==================================== */ - tableData.setTitle("xx中学成绩单"); +// tableData.setTitle("xx中学成绩单"); GradesRanking gradesRanking = new GradesRanking(); Score top1 = new Score("李华", BigDecimal.valueOf(285), BigDecimal.valueOf(90), BigDecimal.valueOf(95), BigDecimal.valueOf(100)); @@ -59,26 +60,27 @@ public class Demo { gradesRanking.setTop1(top1); gradesRanking.setTop2(top2); gradesRanking.setTop3(top3); - tableData.setGradesRanking(gradesRanking); + + mapData.put("gradesRanking", gradesRanking); + +// tableData.setGradesRanking(gradesRanking); List hotCommentsList = Arrays.asList( "我们都应该向成绩好的同学们学习!加油!", "学好数理化,走遍天下都不怕", "数学不学好,一切皆为0"); - tableData.setHotCommentsList(hotCommentsList); - +// tableData.setHotCommentsList(hotCommentsList); + mapData.put("hotCommentsList", hotCommentsList); - List classScoreList = Arrays.asList( - new ClassScore(1,"高一1班", "李华", BigDecimal.valueOf(285), BigDecimal.valueOf(90), BigDecimal.valueOf(95), BigDecimal.valueOf(100)), - new ClassScore(1,"高一1班", "小明", BigDecimal.valueOf(270), BigDecimal.valueOf(80), BigDecimal.valueOf(100), BigDecimal.valueOf(90)), - new ClassScore(1,"高一1班", "张三", BigDecimal.valueOf(265), BigDecimal.valueOf(80), BigDecimal.valueOf(95), BigDecimal.valueOf(90)), - new ClassScore(2,"高一2班", "小红", BigDecimal.valueOf(260), BigDecimal.valueOf(95), BigDecimal.valueOf(70), BigDecimal.valueOf(95)), - new ClassScore(2,"高一2班", "马小跳", BigDecimal.valueOf(200), BigDecimal.valueOf(60), BigDecimal.valueOf(60), BigDecimal.valueOf(80)), - new ClassScore(2,"高一2班", "李三光", BigDecimal.valueOf(255), BigDecimal.valueOf(55), BigDecimal.valueOf(100), BigDecimal.valueOf(100)), - new ClassScore(2,"高一2班", "李四", BigDecimal.valueOf(250), BigDecimal.valueOf(80), BigDecimal.valueOf(90), BigDecimal.valueOf(80))); - tableData.setClassScoreList(classScoreList); + List classScoreList = new ArrayList<>(); - tableData.setPrincipalComment("你们都是祖国未来的希望!"); + int count = 1000; + for (int i = 0; i < count; i++) { + ClassScore dddd = new ClassScore(2, "高一2班", "李四" + i, BigDecimal.valueOf(250), BigDecimal.valueOf(80), BigDecimal.valueOf(90), BigDecimal.valueOf(80)); + classScoreList.add(dddd); + } + mapData.put("principalComment", "你们都是祖国未来的希望!"); + mapData.put("classScoreList", classScoreList); /* ==================================== @@ -87,52 +89,52 @@ public class Demo { 开始动态设置表格 ==================================== */ - - Row row13 = table.getRow(13); - Row row14 = table.getRow(14); - // 将 rowNum 大于 13 的都删除,进行动态表格添加 - table.removeRowGE(13); - - // 将班级成绩单列表按照 班级id 进行分组遍历 - int classScoreIndex = 0; - Map> classScoreMap = tableData.getClassScoreList().stream() - .collect(Collectors.groupingBy(ClassScore::getClassId)); - for (Entry> entry : classScoreMap.entrySet()) { - for (ClassScore classScore : entry.getValue()) { - // 复制模板的第13行 - Row copy = row13.copy(); - // 此处直接设置值也行。设置值或者设置变量,建议统一。我在此处设置为变量 - copy.getCell("A").setValue("${classScoreList["+classScoreIndex+"].className}"); - copy.getCell("B").setValue("${classScoreList["+classScoreIndex+"].name}"); - copy.getCell("D").setValue("${classScoreList["+classScoreIndex+"].chineseScore}"); - copy.getCell("E").setValue("${classScoreList["+classScoreIndex+"].mathScore}"); - copy.getCell("F").setValue("${classScoreList["+classScoreIndex+"].englishScore}"); - - classScoreIndex++; - - // 设置完毕后,添加进表格 - table.appendRow(copy); - } - } - - // 合并单元格,【此处仅展示功能,需要合并的 rowNum 建议动态计算】 - table.mergeCell(13, 15, "A", "A"); - table.mergeCell(16, 19, "A", "A"); -// MergedRegion mergedRegion1 = new MergedRegion(13, 15, "A", "A"); -// MergedRegion mergedRegion2 = new MergedRegion(16, 19, "A", "A"); -// table.mergeCellBatch(Arrays.asList(mergedRegion1, mergedRegion2)); - - // 设置指定行的单元格样式,【此处仅展示功能:加粗,rowNum 建议动态计算】 - table.getRow(19).setBorderStyle(BorderPositionEnum.BOTTOM, BorderStyle.MEDIUM); - - // 设置超链接 - table.getRow(2).getCell("A").setHyperlinkURL("https://www.baidu.com"); - - // 班级成绩设置好之后,将最后的校长评语添加进表格 - table.appendRow(row14); +// +// Row row13 = table.getRow(13); +// Row row14 = table.getRow(14); +// // 将 rowNum 大于 13 的都删除,进行动态表格添加 +// table.removeRowGE(13); +// +// // 将班级成绩单列表按照 班级id 进行分组遍历 +// int classScoreIndex = 0; +// Map> classScoreMap = tableData.getClassScoreList().stream() +// .collect(Collectors.groupingBy(ClassScore::getClassId)); +// for (Entry> entry : classScoreMap.entrySet()) { +// for (ClassScore classScore : entry.getValue()) { +// // 复制模板的第13行 +// Row copy = row13.copy(); +// // 此处直接设置值也行。设置值或者设置变量,建议统一。我在此处设置为变量 +// copy.getCell("A").setValue("${classScoreList["+classScoreIndex+"].className}"); +// copy.getCell("B").setValue("${classScoreList["+classScoreIndex+"].name}"); +// copy.getCell("D").setValue("${classScoreList["+classScoreIndex+"].chineseScore}"); +// copy.getCell("E").setValue("${classScoreList["+classScoreIndex+"].mathScore}"); +// copy.getCell("F").setValue("${classScoreList["+classScoreIndex+"].englishScore}"); +// +// classScoreIndex++; +// +// // 设置完毕后,添加进表格 +// table.appendRow(copy); +// } +// } +// +// // 合并单元格,【此处仅展示功能,需要合并的 rowNum 建议动态计算】 +// table.mergeCell(13, 15, "A", "A"); +// table.mergeCell(16, 19, "A", "A"); +//// MergedRegion mergedRegion1 = new MergedRegion(13, 15, "A", "A"); +//// MergedRegion mergedRegion2 = new MergedRegion(16, 19, "A", "A"); +//// table.mergeCellBatch(Arrays.asList(mergedRegion1, mergedRegion2)); +// +// // 设置指定行的单元格样式,【此处仅展示功能:加粗,rowNum 建议动态计算】 +// table.getRow(19).setBorderStyle(BorderPositionEnum.BOTTOM, BorderStyle.MEDIUM); +// +// // 设置超链接 +// table.getRow(2).getCell("A").setHyperlinkURL("https://www.baidu.com"); +// +// // 班级成绩设置好之后,将最后的校长评语添加进表格 +// table.appendRow(row14); // 将变量的值填充进表格 - ExcelHelper.fillInData(table, tableData); + ExcelHelper.fillInData(table, mapData); // 获取转换后的二进制(支持多 sheet 导出) @@ -149,4 +151,6 @@ public class Demo { fos.close(); } + + } \ No newline at end of file diff --git a/src/test/resources/demo1.xlsx b/src/test/resources/demo1.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7698e31ed6a5893dff1ce3eb685199f4087491b4 GIT binary patch literal 13613 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 literal 0 HcmV?d00001 -- Gitee From 58dc7e88b8f3dd4115aab1f511aca6fe2b388c9b Mon Sep 17 00:00:00 2001 From: "492273770@qq.com" Date: Tue, 26 Apr 2022 10:57:33 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=BE=AA=E7=8E=AF?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0${each.classScoreList.className}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../github/chimmhuang/excel/ExcelHelper.java | 8 ++++++-- .../github/chimmhuang/excel/demo/Demo.java | 11 ++++++++++- src/test/resources/demo1.xlsx | Bin 13613 -> 13584 bytes 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java b/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java index 064c8c3..1f6de7a 100644 --- a/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java +++ b/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java @@ -141,7 +141,7 @@ public class ExcelHelper { for (Cell cell : table) { Object value = cell.getValue(); if (value instanceof String && ((String) value).startsWith("${each.")) { - rowMap.put(cell.getRow(), value.toString().split("\\.")[1].replace("[i]", "")); + rowMap.put(cell.getRow(), value.toString().split("\\.")[1]); break; } } @@ -156,7 +156,11 @@ public class ExcelHelper { Row copy = row13.copy(); int finalI = i; copy.getColCellMap().entrySet().forEach(key1 -> { - copy.getCell(key1.getKey()).setValue(key1.getValue().getValue().toString().replace("each.","").replace("[i]", "["+ finalI+"]")); + String replace = key1.getValue().getValue().toString().replace("each.", ""); + String[] split = replace.split("\\."); + List list = new ArrayList<>(Arrays.asList(split)); + list.set(0,list.get(0) + "["+ finalI+"]"); + copy.getCell(key1.getKey()).setValue(String.join(".",list)); }); rowList.add(copy); } diff --git a/src/test/java/com/github/chimmhuang/excel/demo/Demo.java b/src/test/java/com/github/chimmhuang/excel/demo/Demo.java index 9e987c3..77a2f49 100644 --- a/src/test/java/com/github/chimmhuang/excel/demo/Demo.java +++ b/src/test/java/com/github/chimmhuang/excel/demo/Demo.java @@ -30,7 +30,7 @@ public class Demo { public void testFillInTable() throws Exception { // 获取 excel 二进制文件 - File file = new File("C:\\Users\\49227\\Downloads\\chimm.excel-master\\src\\test\\resources\\demo1.xlsx"); + File file = new File("D:\\workspace\\chimm.excel\\src\\test\\resources\\demo1.xlsx"); byte[] bytes = FileUtils.readFileToByteArray(file); // 创建 table 对象 @@ -153,4 +153,13 @@ public class Demo { } + @Test + public void test() throws Exception { + String str = "${each.classScoreList.className}"; + String[] split = str.split("\\."); + List list = new ArrayList<>(Arrays.asList(split)); + list.set(1,list.get(1) + "[i]"); + System.out.println(String.join(".",list)); + + } } \ No newline at end of file diff --git a/src/test/resources/demo1.xlsx b/src/test/resources/demo1.xlsx index 7698e31ed6a5893dff1ce3eb685199f4087491b4..e944fd2ab7f84851ee819d44352bb436db2c8e86 100644 GIT binary patch delta 4722 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 PFpg9~n4$spPs0BI3j(w2 delta 4701 zcmZ9QbyU<}x5ft;8UbN|0qHJj3F#h28l+3Q8%g=n0!j`bAR^LTLpM?)=}^)zgc1^h zgw)IL-n-s=-+TVp>#TLwUT3Yn*ZJ({Imymd&b4Pa_|BS}?Na*@2V>Fym*1@V;>6{GcD_A8GT zTWv{3CQn=w1(teULqO?=0m~cc2h|Y|0x7e^l3X!kc56KfOlLsm07s-MySZxUjI2FVP>1|{}SGEx^#8EY6Ir`;z){4&!FtEWPK-hNEjG3 z9R{j*+p>_`KmJ*rFZ9`8HUjc`-F1EOWZu^`$(+Bo1mS7VfdCk@igp~kG8021goR>D z8572vjm0JfX%yp0)IY)`jcOk~kqRz8?pu~=+5uc}7PU5NTUXu17fT&pWqz7j`OQuK z9y0I+0qf?gh0&l0D*e@N_m_0&lSO?wQbZB!Phpnw&TfE)S`U!)lDmbhnD*STSEIs zPbr9Sb#y0roU*E){eZNuOjlY}b?LY5$q&-fW?!u@(P>Br=b)$QH_BWle)N7nL-=lL zd3tvp=^?C6xZ+GATSB)UJbb$BuHuX3XH{PQNVQm_8Tq7r*iW|Z!K{U}(p;REUHg>> z;naH;Dhs}@mF40gzT8*Y9LQfmKaw=XNgX)*nHI*6lx424k%|Nsn8ZNVQq=}F2$T;2 zfuJD7nh*_;gD~}YF8~=@<@hCO6spz3`so2dS+T)9x5iY%!S8)2dFA)a`Ej?IuB$|i zFj(Mle2=Kik>s7vF?zj}b-~9by4pv5P*A1AzK!$``;cr`jmkOHSamM~Zhk`hv1Nc{ zh@!U*Da`r(@udXvtP#S57jB~XSfBabsuA)X;l9Hc4 z_?St!S-{trVDO{JB9}!wrFBao@#!L5q^W@GC84Gca`_2M@pG)$#^lc*Fd-}h^*=PK z9+*Fiy@C~|eJTi-40k}a;$Io&rdg?&nzsoi7Z{xQU7R@5>&zmmH@fi^i&NHv*9pb* zQk&HPW@K(UQSI=f7fvK6J3{lC5Q)%)i8(xb^y>iV(?!b;GYBU4et|;FJBeGldWtNx zV=LZ+Q@x|eP9ql8Ies(mZE5iPJ!JwYPuJBz#ZBYB16#L zRW)bgA$>;;6XdK5-%Hot?$2!=O#i_##(QSVGY1Pv^2hC?77sj3t_T>4zLw2w&J0l7s<(dPNdv=f{ zMf0EpYnxfGlkDSVax{P#BZdNLo8mFHc|oL|r~0Q@VAX0Ln3<9L!tJYf%*uTJTaj4i zsa8T}P8moNioUYL8V&znX9HW;4t`wGkcxG~bI~5l_5`C3)kU!N^YwF2>F&^9mZ3CY z7+^O`_j2McJ5>DCBdm(SmhWt!7kp`*-_u)V)C=H*t)A~O2d+{L_X0ZHT57bq!i6tj zBcur_V5I=Ic%E>v4#T)O-FRL_II9ktv-Jqhn=123ky~cEMbQN)wTpcjE0O~03eemsq5YS}xYvcAR$>U?TYYB2f**oVr$Y%IEu@ML|W45kGpE^^!i7Yr|Ug4j1P z)|_o#9;LjhzXP5hqpTY?J(Xu`cvpy<5O7Ln7qD&$u+7rY%-%>Sewv5iz4rTrpt!}CBBgJ zH99QER|rmxWcHuZ81{nXuK5OydHp=i77y56$+Yk`ch^f>#D$G@KI&Zl204(VUXB_X zN>^C#%}zNmn@BaPUfRfqMNN;ZFjLPU3zJbTRJ=&b>~Lbge9ww!JIUUKA|V*l#XcA)@~G@UGMTemEJXXmGvd8LY={^R2vkJzKOm$4g!ls7TyqeMi3V=$Ka#{Sq9Q2E6U1JkOucoK($u^)M&uE%Hv5AFk9fg*AwMgGZ@_Tx{P-Z|p3~ zH>?oqWskVW)G{z9`RUJgm`+TddsL`}OS!=e5e6?^V-nR1+ApvCr#kgbJ70_j$o)Je za(lZ|!8qyL2maOt>>J|>C+J5&FZB21&f`-S+{oNWqhC!$M~@FVWIL0wWBx_B6SFFGU<;Y2y7MCJ22f zb(}ny(EXKF{JHMP;DsEqX13)bf20uOsY1{%0D{92Zq2_0P#(p{udw5nP#O3}4|qh` zQDsW=J^vLTtq6>SgpXV`WTsu($Z*APdes{(sUjf!1RX@rI?U|vCPPeoN^AYLxMoKu zF%5Zg@~mY19-KxZJG%nU-|oxS5Aqr>enx`>fkKESSKUA#b=T#sttlC0tIp!!gs%JJ zL;TI?WMd?dp|hw>AAabnmP$J5e{@6AQ(DDrS`eZrW zJ8%<6zjcPDuX@GFw(P_*kbFTT?iOv_Oo6U_axw*o49C+(B`Eatii7)wnTc;$dmVfV zpxS~%Vd4U{3`06ln_#&DXzjQlBe4NocH%@lPBnOVoG8|iPMmj$d~Hpu@e3NgyWO-v zCEOHj#&&nFSMTmX|AfkSBkqd=q{_g+TKRH6JKH7pu-qTUww>~yxX^goN6P5W-cx75 zp(KQXhS*7tI7b<6Mw{q6oV6}~m}Kr>bv}2)*PU}W%7?w-I(xU!{pZN3-4?mgXoY|6 z2At2G?9CmV=0n1&hxD$HQhUJdZ{Jn-k9RZXt1mtB9_NA=x2gy(l$E0xU5xZ<={L`p znLlQug1L>h`Hefc#mo_7MZq6XoE6{F4c3|^r=l{2Tu4*?Dv^_A zX~8slDJvaY4OJvNOEf8bp^h>Ja3_pu+XR^tvic@le>J$>O1%cwZN_~&(y@_ zHRik)r$!#E zfHhpg(V9e{BtJ~zu%4FCGm`^8hG#|^0a4n5I`C;{%cZDL^Lf;Gly5&BUZ&GaAyC^j zNzQ)!`UmCcIUHU~!{i{E24rie8pK~DsE0GOXg$9(EMSl+XU)7J+H9ouF3Xm~6vn6S zbS6yDgOkHi@E3uAApo#%#P=zth>Y$kW6Z$On z0W{ZqfUG~sxT4V)o26v3-`Pdc9iLJm07W$H&zxQ!J3$I&nvNr{pj@|_I-SCyBUw-r zc?$!(@2qY?czONto}wLF2%3wlV?n|Cdg0;y<)s@FLmmlt7)W7g3o%fmt(<0z2?FKd zgFyG96BOXe@8kHw+s;sh9gf ztIxy-AChnH7y_$LNdaskJ?pSkGcXx5WussjbZuof;hAB0zc{O?FPA*dcO@d;_f-5p z-+HN8;R}cLwF2fknOlq`LRo)fWBDJ695GT2<>d>=%1zo6D=hg?G#Z)dO2y(Q^O~?N zf#&)fpGPq0>jcuYbb!@AywLk$|7lRr|C^2ZdU17sos*PQ5CuTL&rzVWVI>m4U!`k_ z(2Pm&?EZ7(BJJ9hwJ+K?{@OG6%Jzacx{T!Wpr+8%gY*2k_OhkflG<~=^s8$mOiRVE z)C@jI&)^&iN2TaFrSPxB9hgPcOMvN9s^t$$W4M^ZmTKgf|lJuGXD{qXj^A* z?O>NpIo>s9BOEzQa|=$7E)Rdt#}6YHpLBG=0{ge93X-P=skl=wVz75v`94PKL+*vn z?SG*cv5iBDFyWfRezkE3(m;xGb6^0^`UD^YtJvL&!@=(xrX&;=*BQ<>3u1_mn&(eOcbbY!k|JQ)y6*ya z5px_b%LY3af1COstd2VFXDlQ{DO=0*9Mmf~ohKLkdWv;G)`G;KRrXPk9ai?B8gjDr>W%%3oCO6dhUnmn0zdD;VaZ_G5y<8=pCq$LwO*ksn)IkAv-s$*NPOFu6 z5dXv{l#aM7h4FxxZEsZK_OUkDy1OR~`(ZT9*J!P2P@odCP}B%1fNO Date: Wed, 1 Jun 2022 19:13:37 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=81=87=E5=88=B0?= =?UTF-8?q?=E7=A9=BA=E8=A1=8C=E6=8A=A5=E9=94=99=E5=92=8C=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E5=89=8D=E5=90=8E=E6=9C=89=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 64 +++++++----------- .../github/chimmhuang/excel/ExcelHelper.java | 23 ++++--- .../excel/tablemodel/SheetTable.java | 4 +- .../github/chimmhuang/excel/demo/Demo.java | 3 +- src/test/resources/demo1.xlsx | Bin 13584 -> 13699 bytes 5 files changed, 44 insertions(+), 50 deletions(-) diff --git a/pom.xml b/pom.xml index 66461a6..3698b2b 100644 --- a/pom.xml +++ b/pom.xml @@ -145,46 +145,34 @@ - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - - - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.7 - true - - sonatype-nexus-staging - https://oss.sonatype.org/ - true - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - sonatype-nexus-snapshots - oss Snapshots Repository - https://oss.sonatype.org/content/repositories/snapshots - - - sonatype-nexus-staging - oss Staging Repository - https://oss.sonatype.org/service/local/staging/deploy/maven2/ - - \ No newline at end of file diff --git a/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java b/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java index 1f6de7a..e923e13 100644 --- a/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java +++ b/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java @@ -17,6 +17,7 @@ import com.github.chimmhuang.excel.tablemodel.MergedRegion; import com.github.chimmhuang.excel.tablemodel.Row; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; +import org.apache.commons.lang3.StringUtils; import org.apache.poi.common.usermodel.HyperlinkType; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.RichTextString; @@ -30,9 +31,7 @@ import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.beans.PropertyDescriptor; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; +import java.io.*; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.math.BigDecimal; @@ -89,6 +88,12 @@ public class ExcelHelper { return new ExcelWorkbook(xssfWorkbook); } + public static ExcelWorkbook createWorkbook(File file) throws IOException { + FileInputStream fis = new FileInputStream(file); + XSSFWorkbook xssfWorkbook = new XSSFWorkbook(fis); + return new ExcelWorkbook(xssfWorkbook); + } + /** * 获取 sheet 页的表格信息 * get the sheet table with index 0 @@ -139,8 +144,8 @@ public class ExcelHelper { Map rowMap = new ConcurrentHashMap<>(); for (Cell cell : table) { - Object value = cell.getValue(); - if (value instanceof String && ((String) value).startsWith("${each.")) { + String value = StringUtils.trim(cell.getValue().toString()); + if (value instanceof String && (value).startsWith("${each.")) { rowMap.put(cell.getRow(), value.toString().split("\\.")[1]); break; } @@ -159,8 +164,8 @@ public class ExcelHelper { String replace = key1.getValue().getValue().toString().replace("each.", ""); String[] split = replace.split("\\."); List list = new ArrayList<>(Arrays.asList(split)); - list.set(0,list.get(0) + "["+ finalI+"]"); - copy.getCell(key1.getKey()).setValue(String.join(".",list)); + list.set(0, list.get(0) + "[" + finalI + "]"); + copy.getCell(key1.getKey()).setValue(String.join(".", list)); }); rowList.add(copy); } @@ -169,7 +174,7 @@ public class ExcelHelper { }); for (Cell cell : table) { - Object value = cell.getValue(); + String value = StringUtils.trim(cell.getValue().toString()); CellType cellType = cell.getCellType(); if (cellType.equals(CellType.FORMULA) && value != null) { @@ -184,7 +189,7 @@ public class ExcelHelper { cell.setFormula(newFormula); - } else if (value instanceof String && ((String) value).startsWith("$") && !((String) value).startsWith("${each.")) { + } else if (value instanceof String && (value).startsWith("$") && !(value).startsWith("${each.")) { // insert value Object propValue = parseCellVariable(data, (String) value); cell.setValue(propValue); diff --git a/src/main/java/com/github/chimmhuang/excel/tablemodel/SheetTable.java b/src/main/java/com/github/chimmhuang/excel/tablemodel/SheetTable.java index a15c985..7dc50ef 100644 --- a/src/main/java/com/github/chimmhuang/excel/tablemodel/SheetTable.java +++ b/src/main/java/com/github/chimmhuang/excel/tablemodel/SheetTable.java @@ -162,7 +162,9 @@ public class SheetTable implements Iterable { // get the cell of the next row. if (currentRowNum <= getLastRowNum()) { Row currentRow = getRow(currentRowNum); - currentCellIterator = currentRow.iterator(); + if(currentRow != null){ + currentCellIterator = currentRow.iterator(); + } } else { return false; } diff --git a/src/test/java/com/github/chimmhuang/excel/demo/Demo.java b/src/test/java/com/github/chimmhuang/excel/demo/Demo.java index 77a2f49..2873da1 100644 --- a/src/test/java/com/github/chimmhuang/excel/demo/Demo.java +++ b/src/test/java/com/github/chimmhuang/excel/demo/Demo.java @@ -31,10 +31,9 @@ public class Demo { // 获取 excel 二进制文件 File file = new File("D:\\workspace\\chimm.excel\\src\\test\\resources\\demo1.xlsx"); - byte[] bytes = FileUtils.readFileToByteArray(file); // 创建 table 对象 - ExcelWorkbook excelWorkbook = ExcelHelper.createWorkbook(bytes); + ExcelWorkbook excelWorkbook = ExcelHelper.createWorkbook(file); SheetTable table = excelWorkbook.getSheet(0); // 设置 自定义 sheet 页名称 diff --git a/src/test/resources/demo1.xlsx b/src/test/resources/demo1.xlsx index e944fd2ab7f84851ee819d44352bb436db2c8e86..f6d3bf85828b38772e05b9ccb0456a52c60a7d2c 100644 GIT binary patch delta 7339 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 R#NZAgJA4dCOg#Ub_&>&<&tw1q delta 7214 zcmZ8`Wl$VUvo-DzTo-qD-Qczmba4-X5NvS^k_`~tSqQdBa0^a=;O=}a+s_R-HLHNPy@Co&D z7J-URl82UBrGT}pj?nvY{Ea_}Yfz$}>-B^fzCq)2&>&0UiJkX|x9%I8fXBP64A-%x z{f??ib~Z8!&5-k`7@m0@-Sa(0`E?f$pu*>wLQW7X_2;~I#Z&vgWM#4;p90OXFYJ-! z3W)U`5d-lB_QQ_(P%WiVYGV^z6B2yIyNyyqA#iE3poLNV{`W6>Bx`xR3OotjgvX*K zJR}VjCIw9l$p%WOK?awGarUCp7*%YSwN4POBXS1Awypd3NXmwq+c6O;pt|y|6FN*o z{!NM=`qnAGZM7ONH~sN4QuWGfY&oFW4Ca%~LicYAtovR{C?H}7m@MrM>y_rF`jBYQ zJcwh}UGuPFPgy8x&ln@>az8-QN{v$P^j)f59b@LWa)G=f@Til!0y)4Ehp^Ur{OP3G zRtLzy=!R(uRj{c88!4q3vR9zJy_lKHaKwK5%JlNPjJ5RJA7Hiba~pHSH!)h^;?J&E zAcFp9SyHu9>_}AkMPfw9Gk|b|dt2Ar$kg=wLz0EU&NHKSBIb}!E%z)gmPpR3xcF1v};Mcdg1G#1Z>3sf>{5smK^5;(NqJ!3SJ zz`Ym;v}~L4bN5Yv+~;PxpR~F!n%gzOA#)X!V^c?GetMDk_N+L}=SS}WD~q9v`7!bSolf zzolHESTEAJ2pYQ2fi6ZzZ)yhhhqfvRr&EzK>R zqY0upL7MeT6Ki)xBm{j_M;@`?gg?YhLSdU2Wc8Xj>L@tjH<6{w=txNEq_8h|4A7PM zECIssGwy3zo^|%uphbKf69XD$i?Z_a99LSK5HcFQ70Jey%Cf7Yo$hU8MtBedH z-?|z-A#}>0f0*k6=XqVbzzzkap-}DmC}$@L-d=5W6*a)Sr2PDDT1N3(0WSmWfwasM zQde_KL31$XJ%rbEWtOxRv!rzCbeU+j9KFvJw5f$0o%H5zw0JtainT9@g=A!Ex+}X2 zcH`1>AIHv`K5b~^g11vT8%XoSlc}6y0cyHf4`YN4owuK(19XOuS&|OJps9E@SE)5W zQGOi?-D#zuKau2C6OHw~xDdGd*6An6kFLL{8irSm^BBLwEz~{zhK~B6bptctIv(yK zdp;uV$!YxyRi(4h(2DZ9pP8!V{^`JsSS-w7eZc8!Q_d~Q<(qTomYp$i(tLrFy9_l3 zoQGo`wsC0H=Nc6M{FuDsTd3tK7vQ5dMrvC=@Gz(Gkx|_!^w|&o7AEnkxLN$ee8jD} zvm-^N+m%AV?ykcyZ|DciARD1;t&Gnb$SQ@OWSgg|uPFBvRkcfOh$m+-KbrYontY6| z%l0DH^3KdPY$`fR6?6Uk6l*XjYmnKAr`JJWP zwt0r<9X(gL-nv!R>GDa;=-uQISZKnqxBArkW9KElS#}jG?EK+8pgG5?<7QG;6s559 ztoEE+93BS`Hlk)H@88<^IYVOra#|7Yd6XsH7O&y#4&S3GfE&D zMjU4BNH=w*O0>0eOI9iM;TclSO{J(J+c8eT$UvnCCBM?zi1||;8paVOb59fp4ZbJkQtY1L}0^XRSzl_PlOfWly~~rm3_p)ifYt4 z2pLYL9v~O=VJr}fr8RzNetz0sDPbEoxNiZ)3tPJ4QLSty?Qqz+fdxi%ep3Ud%>+Rt zwjRMEhaA?K67KGAIRK7RMad+gbK$~vj<(s~Up@C3rac+gNsT%+M{H8vV+y|?^GHRE z6a)e0!k|!q_X;55e%zzx>mB~!VUyw?o!kDhh|*uXMZyR-=jdB;3R(aP#(0?Nw1=C! zo1;o^6xewNXPo({BQ7r5>7$~7*9gM2>HYj6RRk7kox@#U!Dt|qN7Qo)K?zPIn|M>8y0qf@MTIc ziAaIFUByG!>RgazwfAp-+lB=b@RaG$c|$PT9;nVxlw{bI8G=`a9sMeqzaA;xTCM?V zbykk85Re>(;ybH3?17fE;pIQ>esGm3;diu_ZW-vJx6_IV8gHj*Uz$cc1tzzdh{{yi zGA&Z5#VypcfOp0NKqov=bMQ>oyG-1GZlQ-Fx&s|{lqM;)h!j?}XLKEH!VY7qmLasX z9;l?o{>wr(EYV+m(4T)W|BHC&U)($EnrZb45Vl3{q9#h96*VSeePgB~M1>+F_3J-H=%e#SRp(SVp zq+N?LcyHDTjH== zllrVwADqRIE8!AU% z4}cRMosc~;`E4=A(LiBpZsmoa<1T^$0MX7yD~z{t2N_rM&m4GKDE*euX5I~SvUY7^ zt;xy*l$dqw(FuV7^YZ0O|L~{JcYris2SLtX5rJUR;a*#r&KNe%911_8&wjN-PhYYe z#=rE;r2YJ;Y4FycK=GOfDg51XTvbMpHwq9|6{qWmbhX zzdXz5Cg^3QjF1a;b+R|N4^4I2o^73i5l!TbvMY;R$;e7?| zw(J;vF$93m+t_aBgQm9b?(UuzC-qb-(pAaN$p3Ok+J87i8QQ;5j?iagU5aO^xr;V6As(ij1tq*DndR(|tT#ya@_Q7svZkYqe|%@dY{OMh`GyzolAYV z4o`BkFG}8H4{pyIBp36kvs5tVvx_bb#|($LU{0e~apN6kF;mERYC!e~$MJBg;YJB? zHYHuii7@F-iH5jE8>HDK-%?Tu*o2?}u*a8u;nmS#p&_5!W>HB?%}S!$izuim3C&PO z@9D~IHGQTtcYT7gN90aWfi;}^g>8aD2y82fdh-=LRnOFa1r7K<0s_{3glw@CaL2j* zV0Rw(OlD}b8_1?E+kTpnt?Mt6O{tt{5{37=g&6i+$?TbBtS_tnk|<3&bQf89gEubT zyV0;GE~M2?dju=DTK>Q^nFcLscZs#Bj}^_l`%y}V*4bm^2;8QW}k77VZj9DO4Yx$nkD1xS#i7a`pkwMffZjv|SEH&k|wEToKN8=ZkucQ|= z87S-Sx#dsQDzbt44gwEULr%gwV9{VSJFt+yD0yaaidafvYR~1)Efw*gz-xbMWNz*+ zcf%md;#uqw0hINh&@00j!7IahypA~6RmYcNnwR(*zcwklj_WTevB4C#c`0osZy89y6IN_MaG z+%t7sI0R*E0grt-<6C6l?BWUmI=Bg~QcB0k>J`z0g)dg^C)swD$et@~pT(Wa-|ol> z(XMOcA4(35mW30?2J-4FZhY=d-I8)|jx+xrY}qQIVJ#|r?f>vtwi*&OE3ihgsr-yK z28=o1We1c2b=wS_+$VXUQ4?b_k~s@WpiI~Q)D#p{wHQ#utOI!OFUMf2AR*!Z)slYB z{GML#o!@%?!#1ntuM!GW2s>0qpmOj!%oqIIwX`c07pM+J2#yhrLeLUNPcx)o*ILwX ze$C#sWjCEZ$!sEExN}(jj;ic59GQH(8&6E&o2}xkKJ@ya+@<`mdo&y3ev1`Qe2n-0 zP<=-dxLET9%>9aD<@<{gKUP1Q*sCyAmpWc~^8WbO$Hl$EI6*5zihc7JttZ8A zn{QNZ$6FjSo^ockBv%ePO(pr}_sQiDY7oQ*)CY_?x=IicH#MUV{O0g_!87fNY>I4k zcSb~q+C}>S`#X^?%1A$lS~=zblK!jPABmLL-HWD{I`^-fU57pu zHqJ}kbR8_lsb{6=!f+jz*(j01`j$c8<_etY7+U8bv&+Ke>W07`#$>R#>~Hh0@F7i^ z+SIvAI0!gJow}=R#{Y(&HO4%7v?;FyO0_HK`32)x-dC8Hdy@>*ZI47Sr@A=3@d-En z?1ttbh~T&Xe1v_ws$+FcN1CmuPpBLX0Dq6qQqCFsPtr_S)#Qi@DlTtO4V!b-{LZ?s z_&Lxwh#qimUn6jxdVD~B!MjQOGZ&X%v%5&ZRRJWQ67o@G2ht$WB-YT&qqlw!b=lBF z1M^P5jt@YZN7mnrd!o)?_)@G8`+hniWGFZiCw8O)<+lc;WcXg!nr!z#w`VLfo=Pt{ zSHpXNXaBv2XW@c=X*O}|eW>fOb*ojTrnG;6D8Rh5_uWlf`ZI4{i`P{%D8dy~y*_Sg#zw)>%MC5=BzwDp z!|4IeiIR?a-7>q0GuikCxA=II)#X=6nec`jF>LPfb<5X1#!~a1VZ#b_61lB>?M((- zKmxNn4fiq0Mr59(>8tkx%C#)?`0vD}m=O0x?Pz;-H_NaT5~| zU5K~ff-*Kd-_!{9z35t?h&qn?8Bt9IVNUgoA$rq|tMP$lXj9`pmXp^tvKmq?I5{Lf zJ9s0%UQp9ed0+esIOI_`$o|8dyR4Mx zb0g0?^{kP{lf_nrC=lKUKRPqV*N>^k0WK%H$o!*T_xE%7<{M@^ zFXkh63sw^~b4~6ZhFkz4&$HT&7Db@cE?dIa1nHq6fV2_E6__&dSWIG65G&DX6=;p& zaUPWh-d6J?w`+k8z|J+syt6*-*SsqV)}>v8I9N7FK7&40_V0}bESJL9foXBSA3IuX z`#fe9o55eQ_}<}xHw!!9y063Z;4sRM8|g_2z@sse_c=4{@fnK6_bTZ;L!t!HCW$l> zz_hI2q=muTMa6xomHoIBSvW6mt{8AP`uEn9ku9C`X;Gksqrlhls?O-I-uxNqJ$ez} z_Ca<>7J7fRZq+%6(jVw#+HqL33y`}$$2U*0VpEBKFe4%Feq_VQC4a2gQH}jT8fEba zvMPO%w!re*O_wh<-IA}oW)kgAr+j*ud;?k=V|W@_sF~{wkYBiZ2}1kn82tHu{_>2D zkKpd$H+~QlL0N;=*dcyqk(*3;Iep=DnJmn57}+qyhdI?8*96;0Y%hy7`o&o7V446NTl_8O3FJAUWlV#oOgzB!)$ydZ%VSQFhMAAV!U{)ll>?N#Zn>5McU9r||!#kV? z(7G+fn@ViP)^o!1Mod?$UfHI8Hsc=WKt$GrNXri>*&xEuOy04gB)){VQJPA-#8f+_ ze^_-&aLK&zMJwo~^(4XfVXR8i0jn;u%4n-UaZD_9SYu41zX*%$wxFugBIUc~H!K(BH`nS*X*6U@oKJPm!9m8b@r+?LOD5tPFw#QK-`DiP&O< zsNC~Q!Wd8+b7IpTjSUYvb6rxq)}aWEVq~VRVJZBep?<+iZXPTmuk;wgTWRGALw*jK zJ~WURgwQ2qbgL0RNNhl4X+!V9Z`hkzyfnYG;5 zH8m%ZsiJLn;M(zrhnZ+#^*dm8^Rvv_vJ{={xC7L*pt(IePAfw9(vdxFMs}FCL_%L!#dh98m zP;MDTZn;M;)0`Xxdxh+9=^%HHB6r^-=kLJK4oG}*&D*()2`Nf{8D)nVdg$hPzsX?{ zeFN=okd=7L*@vNq-n3BErV>O?G*M+UaHfB@M=oqYZVsyi^BR(mF;~o8j;OI`0%*yz ziY5jF~ml`~PwuYwkV_K{V)RXVXfeS+3n(jF_2d;_ zH2?G#H2P-;9>CieI6(E;6zIzQY|-(1Ace0aQnu!r_8&AsVS{`+Wq(!G)89$>Uv*_; z?QElHZ|&gnkH9jY(8TExAVlA2-=OXJ2|2PNa#&XGCOJS>kP-`iOwk~0Z~xNIWHBM$ zHdwLJRR1$9N#h*lMj0Eg9jE;w^yA>4Z>>lLEJ6H`bB>KrG)O&SPTll}gTu>F{2a7{ zlmR8~{X!8bHD$`_{YhaZc0HNxE{9l-fSJf)lMfuD(XHl4nqQ4crwqDcKMD(Er6E1L zheuIJe6=Q^TS$^kXC^s+`~DaDKL_{BSW=A1xWkXH6IBI&!&3B%&A{r zXy5D*lL%6;XWqCt6^1n!d~S&YD zTaI`)D+PON;2Qp*_V7ZBG3>uK7@!$(Le(yI>5{+}J7%i=H-l1KN zSy|@T3xqoOG+RH0o*=P*Dl`tZ36Ts3zFv$~@>0N&Van3hyGH63)X$Rx#%yy8$Xa5m zEXmUNzunTGp{41Z{oB0Z{ml@68k$;A3t1`6z7`C8qU?mw%PF%->|&%> zXu5N!%*{y68c^kMAjr7w5Cimq-14imxbqppkE&+peIJ66ahcAO4r;ng-e)6ZQ=If! zSQr^wuwf=@U}}C&#xulf%oE?%d7jqnGdmk&MueJa@+UrWuNf?yZ2o3aqJN!#EoRuVhzv>@4~$y$C9)sPNR$nuQShIL{{buCgf;*G -- Gitee From 22c95e11dc6c2659bae507ea64d105538623dc05 Mon Sep 17 00:00:00 2001 From: "492273770@qq.com" Date: Wed, 1 Jun 2022 19:31:57 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=A9=BA=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/github/chimmhuang/excel/ExcelHelper.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java b/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java index e923e13..92a166e 100644 --- a/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java +++ b/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java @@ -162,10 +162,13 @@ public class ExcelHelper { int finalI = i; copy.getColCellMap().entrySet().forEach(key1 -> { String replace = key1.getValue().getValue().toString().replace("each.", ""); - String[] split = replace.split("\\."); - List list = new ArrayList<>(Arrays.asList(split)); - list.set(0, list.get(0) + "[" + finalI + "]"); - copy.getCell(key1.getKey()).setValue(String.join(".", list)); + if(StringUtils.isNotBlank(replace)){ + String[] split = replace.split("\\."); + List list = new ArrayList<>(Arrays.asList(split)); + list.set(0, list.get(0) + "[" + finalI + "]"); + copy.getCell(key1.getKey()).setValue(String.join(".", list)); + } + }); rowList.add(copy); } -- Gitee From 5e44611bfce51f45d3929e72528751611a7fb8fc Mon Sep 17 00:00:00 2001 From: "492273770@qq.com" Date: Thu, 2 Jun 2022 15:48:58 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=A4=E6=96=ADnull?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/github/chimmhuang/excel/ExcelHelper.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java b/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java index 92a166e..7a50c57 100644 --- a/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java +++ b/src/main/java/com/github/chimmhuang/excel/ExcelHelper.java @@ -154,6 +154,10 @@ public class ExcelHelper { rowMap.keySet().stream() .forEach(key -> { List scoreList = (List) ((HashMap) data).get(rowMap.get(key)); + if(scoreList == null){ // 判断如果为null , 模拟一条空白数据 + scoreList = new ArrayList(); + scoreList.add(""); + } Row row13 = table.getRow(key); List rowList = new ArrayList<>(); -- Gitee