Преглед на файлове

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
tags/REL_4_1_1
Dominik Stadler преди 4 години
родител
ревизия
50874d9d0d

+ 21
- 1
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.
*
* <p>
* Example return values:
* <table border="0" cellpadding="1" cellspacing="0" summary="Example return values">
* <tr><th align='left'>Result</th><th align='left'>Comment</th></tr>
* <tr><td>A1</td><td>Cell reference without sheet</td></tr>
* <tr><td>Sheet1!A1</td><td>Standard sheet name</td></tr>
* <tr><td>'O''Brien''s Sales'!A1'&nbsp;</td><td>Sheet name with special characters</td></tr>
* </table>
* @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);
}

+ 1
- 1
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);
}

/**

+ 27
- 0
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();
}
}

+ 23
- 0
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));
}
}

Loading…
Отказ
Запис