diff --git a/jxls-poi/src/main/java/org/jxls/transform/poi/PoiTransformer.java b/jxls-poi/src/main/java/org/jxls/transform/poi/PoiTransformer.java index 8ff794ec..4834bad9 100644 --- a/jxls-poi/src/main/java/org/jxls/transform/poi/PoiTransformer.java +++ b/jxls-poi/src/main/java/org/jxls/transform/poi/PoiTransformer.java @@ -5,6 +5,7 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.List; +import java.util.Map.Entry; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; @@ -50,7 +51,6 @@ * @author Leonid Vysochyn */ public class PoiTransformer extends AbstractTransformer { - private static final int MAX_COLUMN_TO_READ_COMMENT = 50; public static final String POI_CONTEXT_KEY = "util"; private static Logger logger = LoggerFactory.getLogger(PoiTransformer.class); @@ -58,7 +58,6 @@ public class PoiTransformer extends AbstractTransformer { private Workbook workbook; private OutputStream outputStream; private InputStream inputStream; - private Integer lastCommentedColumn = MAX_COLUMN_TO_READ_COMMENT; private final boolean isSXSSF; private ExceptionHandler exceptionHandler = new PoiExceptionLogger(); @@ -197,14 +196,6 @@ public Workbook getWorkbook() { return workbook; } - public Integer getLastCommentedColumn() { - return lastCommentedColumn; - } - - public void setLastCommentedColumn(Integer lastCommentedColumn) { - this.lastCommentedColumn = lastCommentedColumn; - } - private void readCellData() { int numberOfSheets = workbook.getNumberOfSheets(); for (int i = 0; i < numberOfSheets; i++) { @@ -538,13 +529,14 @@ private int findPoiPictureTypeByImageType(ImageType imageType) { private List readCommentsFromSheet(Sheet sheet, int rowNum) { List commentDataCells = new ArrayList(); - for (int i = 0; i <= lastCommentedColumn; i++) { - CellAddress cellAddress = new CellAddress(rowNum, i); - Comment comment = sheet.getCellComment(cellAddress); - if (comment != null && comment.getString() != null) { - CellData cellData = new CellData(new CellRef(sheet.getSheetName(), rowNum, i)); - cellData.setCellComment(comment.getString().getString()); - commentDataCells.add(cellData); + for (Entry e : sheet.getCellComments().entrySet()) { + if (e.getKey().getRow() == rowNum) { + Comment comment = e.getValue(); + if (comment.getString() != null) { + CellData cellData = new CellData(new CellRef(sheet.getSheetName(), e.getKey().getRow(), e.getKey().getColumn())); + cellData.setCellComment(comment.getString().getString()); + commentDataCells.add(cellData); + } } } return commentDataCells; diff --git a/jxls-poi/src/test/java/org/jxls/transform/poi/LastCommentedCellTest.java b/jxls-poi/src/test/java/org/jxls/transform/poi/LastCommentedCellTest.java new file mode 100644 index 00000000..41863e09 --- /dev/null +++ b/jxls-poi/src/test/java/org/jxls/transform/poi/LastCommentedCellTest.java @@ -0,0 +1,31 @@ +package org.jxls.transform.poi; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +import org.apache.poi.EncryptedDocumentException; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; +import org.junit.Assert; +import org.junit.Test; +import org.jxls.common.CellData; + +public class LastCommentedCellTest { + + @Test + public void lastCommentedCell() throws EncryptedDocumentException, IOException { + // Prepare + try (InputStream is = getClass().getResourceAsStream(getClass().getSimpleName() + ".xlsx")) { + Workbook workbook = WorkbookFactory.create(is); + PoiTransformer transformer = new PoiTransformer(workbook, false); + + // Test + List cc = transformer.getCommentedCells(); + + // Verify + Assert.assertTrue(cc.stream().anyMatch(i -> i.getCellComment().contains("comment-1"))); + Assert.assertTrue(cc.stream().anyMatch(i -> i.getCellComment().contains("comment in AZ"))); + } + } +} diff --git a/jxls-poi/src/test/resources/org/jxls/transform/poi/LastCommentedCellTest.xlsx b/jxls-poi/src/test/resources/org/jxls/transform/poi/LastCommentedCellTest.xlsx new file mode 100644 index 00000000..3df3c312 Binary files /dev/null and b/jxls-poi/src/test/resources/org/jxls/transform/poi/LastCommentedCellTest.xlsx differ