From: Dominik Stadler Date: Sat, 22 Jun 2019 06:12:05 +0000 (+0000) Subject: Bug 63509: Allow to format a CellReference without sheet-name for ignoredErrors. X-Git-Tag: REL_4_1_1~68 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=50874d9d0d70647fa490bafe8239f3ad5721c2d4;p=poi.git Bug 63509: Allow to format a CellReference without sheet-name for ignoredErrors. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1861817 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/ss/util/CellReference.java b/src/java/org/apache/poi/ss/util/CellReference.java index 067cdeb512..6e6dbe678d 100644 --- a/src/java/org/apache/poi/ss/util/CellReference.java +++ b/src/java/org/apache/poi/ss/util/CellReference.java @@ -487,8 +487,28 @@ public class CellReference { * @return the text representation of this cell reference as it would appear in a formula. */ public String formatAsString() { + return formatAsString(true); + } + + /** + * Returns a text representation of this cell reference and allows to control + * if the sheetname is included in the reference. + * + *

+ * Example return values: + * + * + * + * + * + *
ResultComment
A1Cell reference without sheet
Sheet1!A1Standard sheet name
'O''Brien''s Sales'!A1' Sheet name with special characters
+ * @param includeSheetName If true and there is a sheet name set for this cell reference, + * the reference is prefixed with the sheet name and '!' + * @return the text representation of this cell reference as it would appear in a formula. + */ + public String formatAsString(boolean includeSheetName) { StringBuilder sb = new StringBuilder(32); - if(_sheetName != null) { + if(includeSheetName && _sheetName != null) { SheetNameFormatter.appendFormat(sb, _sheetName); sb.append(SHEET_NAME_DELIMITER); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index d0a43af357..f897d80547 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -4555,7 +4555,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { * @param ignoredErrorTypes Types of error to ignore there. */ public void addIgnoredErrors(CellReference cell, IgnoredErrorType... ignoredErrorTypes) { - addIgnoredErrors(cell.formatAsString(), ignoredErrorTypes); + addIgnoredErrors(cell.formatAsString(false), ignoredErrorTypes); } /** diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java index 65227c0b78..e0bf0f415c 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -101,6 +101,7 @@ import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.FormulaError; import org.apache.poi.ss.usermodel.FormulaEvaluator; +import org.apache.poi.ss.usermodel.IgnoredErrorType; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Name; import org.apache.poi.ss.usermodel.PrintSetup; @@ -3462,4 +3463,30 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { assertEquals(1, ctMergeCellCount); assertEquals(1, ctMergeCellListSize); } + + @Test + public void testBug63509() throws IOException { + XSSFWorkbook workbook = new XSSFWorkbook(); + + XSSFSheet sheet = workbook.createSheet("sheet1"); + + Row row = sheet.createRow(0); + + Cell cell = row.createCell(0); + cell.setCellValue("1000"); + + // This causes the error + sheet.addIgnoredErrors(new CellReference(cell), IgnoredErrorType.NUMBER_STORED_AS_TEXT); + + // Workaround + // sheet.addIgnoredErrors(new CellReference(cell.getRowIndex(), cell.getColumnIndex(), false, false), + // IgnoredErrorType.NUMBER_STORED_AS_TEXT); + + /*File file = new File("/tmp/63509.xlsx"); + try(FileOutputStream outputStream = new FileOutputStream(file)) { + workbook.write(outputStream); + }*/ + + workbook.close(); + } } diff --git a/src/testcases/org/apache/poi/ss/util/TestCellReference.java b/src/testcases/org/apache/poi/ss/util/TestCellReference.java index 71e2218fef..095eb701d2 100644 --- a/src/testcases/org/apache/poi/ss/util/TestCellReference.java +++ b/src/testcases/org/apache/poi/ss/util/TestCellReference.java @@ -54,18 +54,28 @@ public final class TestCellReference { cellReference = new CellReference(row, col); assertEquals("A1", cellReference.formatAsString()); + assertEquals("A1", cellReference.formatAsString(true)); + assertEquals("A1", cellReference.formatAsString(false)); cellReference = new CellReference(row, col, absRow, absCol); assertEquals("A$1", cellReference.formatAsString()); + assertEquals("A$1", cellReference.formatAsString(true)); + assertEquals("A$1", cellReference.formatAsString(false)); cellReference = new CellReference(row, (short)col); assertEquals("A1", cellReference.formatAsString()); + assertEquals("A1", cellReference.formatAsString(true)); + assertEquals("A1", cellReference.formatAsString(false)); cellReference = new CellReference(cellRef); assertEquals("A1", cellReference.formatAsString()); + assertEquals("A1", cellReference.formatAsString(true)); + assertEquals("A1", cellReference.formatAsString(false)); cellReference = new CellReference(sheet, row, col, absRow, absCol); assertEquals("Sheet1!A$1", cellReference.formatAsString()); + assertEquals("Sheet1!A$1", cellReference.formatAsString(true)); + assertEquals("A$1", cellReference.formatAsString(false)); cellReference = new CellReference(sheet+"!$A1"); assertFalse(cellReference.isRowAbsolute()); @@ -95,18 +105,26 @@ public final class TestCellReference { cellReference = new CellReference(null, 0, 0, false, false); assertEquals("A1", cellReference.formatAsString()); + assertEquals("A1", cellReference.formatAsString(true)); + assertEquals("A1", cellReference.formatAsString(false)); //absolute references cellReference = new CellReference(null, 0, 0, true, false); assertEquals("A$1", cellReference.formatAsString()); + assertEquals("A$1", cellReference.formatAsString(true)); + assertEquals("A$1", cellReference.formatAsString(false)); //sheet name with no spaces cellReference = new CellReference("Sheet1", 0, 0, true, false); assertEquals("Sheet1!A$1", cellReference.formatAsString()); + assertEquals("Sheet1!A$1", cellReference.formatAsString(true)); + assertEquals("A$1", cellReference.formatAsString(false)); //sheet name with spaces cellReference = new CellReference("Sheet 1", 0, 0, true, false); assertEquals("'Sheet 1'!A$1", cellReference.formatAsString()); + assertEquals("'Sheet 1'!A$1", cellReference.formatAsString(true)); + assertEquals("A$1", cellReference.formatAsString(false)); } @Test @@ -474,6 +492,11 @@ public final class TestCellReference { final CellReference badCellRef = new CellReference(cell); assertEquals("'Ctor test'!$A$1", goodCellRef.formatAsString()); + assertEquals("'Ctor test'!$A$1", goodCellRef.formatAsString(true)); + assertEquals("$A$1", goodCellRef.formatAsString(false)); + assertEquals("'Ctor test'!A1", badCellRef.formatAsString()); + assertEquals("'Ctor test'!A1", badCellRef.formatAsString(true)); + assertEquals("A1", badCellRef.formatAsString(false)); } }