mirror of https://github.com/apache/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
This commit is contained in:
parent
0cd5834661
commit
50874d9d0d
|
@ -487,8 +487,28 @@ public class CellReference {
|
||||||
* @return the text representation of this cell reference as it would appear in a formula.
|
* @return the text representation of this cell reference as it would appear in a formula.
|
||||||
*/
|
*/
|
||||||
public String formatAsString() {
|
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' </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);
|
StringBuilder sb = new StringBuilder(32);
|
||||||
if(_sheetName != null) {
|
if(includeSheetName && _sheetName != null) {
|
||||||
SheetNameFormatter.appendFormat(sb, _sheetName);
|
SheetNameFormatter.appendFormat(sb, _sheetName);
|
||||||
sb.append(SHEET_NAME_DELIMITER);
|
sb.append(SHEET_NAME_DELIMITER);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4555,7 +4555,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
||||||
* @param ignoredErrorTypes Types of error to ignore there.
|
* @param ignoredErrorTypes Types of error to ignore there.
|
||||||
*/
|
*/
|
||||||
public void addIgnoredErrors(CellReference cell, IgnoredErrorType... ignoredErrorTypes) {
|
public void addIgnoredErrors(CellReference cell, IgnoredErrorType... ignoredErrorTypes) {
|
||||||
addIgnoredErrors(cell.formatAsString(), ignoredErrorTypes);
|
addIgnoredErrors(cell.formatAsString(false), ignoredErrorTypes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -101,6 +101,7 @@ import org.apache.poi.ss.usermodel.FillPatternType;
|
||||||
import org.apache.poi.ss.usermodel.Font;
|
import org.apache.poi.ss.usermodel.Font;
|
||||||
import org.apache.poi.ss.usermodel.FormulaError;
|
import org.apache.poi.ss.usermodel.FormulaError;
|
||||||
import org.apache.poi.ss.usermodel.FormulaEvaluator;
|
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.IndexedColors;
|
||||||
import org.apache.poi.ss.usermodel.Name;
|
import org.apache.poi.ss.usermodel.Name;
|
||||||
import org.apache.poi.ss.usermodel.PrintSetup;
|
import org.apache.poi.ss.usermodel.PrintSetup;
|
||||||
|
@ -3462,4 +3463,30 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
|
||||||
assertEquals(1, ctMergeCellCount);
|
assertEquals(1, ctMergeCellCount);
|
||||||
assertEquals(1, ctMergeCellListSize);
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,18 +54,28 @@ public final class TestCellReference {
|
||||||
|
|
||||||
cellReference = new CellReference(row, col);
|
cellReference = new CellReference(row, col);
|
||||||
assertEquals("A1", cellReference.formatAsString());
|
assertEquals("A1", cellReference.formatAsString());
|
||||||
|
assertEquals("A1", cellReference.formatAsString(true));
|
||||||
|
assertEquals("A1", cellReference.formatAsString(false));
|
||||||
|
|
||||||
cellReference = new CellReference(row, col, absRow, absCol);
|
cellReference = new CellReference(row, col, absRow, absCol);
|
||||||
assertEquals("A$1", cellReference.formatAsString());
|
assertEquals("A$1", cellReference.formatAsString());
|
||||||
|
assertEquals("A$1", cellReference.formatAsString(true));
|
||||||
|
assertEquals("A$1", cellReference.formatAsString(false));
|
||||||
|
|
||||||
cellReference = new CellReference(row, (short)col);
|
cellReference = new CellReference(row, (short)col);
|
||||||
assertEquals("A1", cellReference.formatAsString());
|
assertEquals("A1", cellReference.formatAsString());
|
||||||
|
assertEquals("A1", cellReference.formatAsString(true));
|
||||||
|
assertEquals("A1", cellReference.formatAsString(false));
|
||||||
|
|
||||||
cellReference = new CellReference(cellRef);
|
cellReference = new CellReference(cellRef);
|
||||||
assertEquals("A1", cellReference.formatAsString());
|
assertEquals("A1", cellReference.formatAsString());
|
||||||
|
assertEquals("A1", cellReference.formatAsString(true));
|
||||||
|
assertEquals("A1", cellReference.formatAsString(false));
|
||||||
|
|
||||||
cellReference = new CellReference(sheet, row, col, absRow, absCol);
|
cellReference = new CellReference(sheet, row, col, absRow, absCol);
|
||||||
assertEquals("Sheet1!A$1", cellReference.formatAsString());
|
assertEquals("Sheet1!A$1", cellReference.formatAsString());
|
||||||
|
assertEquals("Sheet1!A$1", cellReference.formatAsString(true));
|
||||||
|
assertEquals("A$1", cellReference.formatAsString(false));
|
||||||
|
|
||||||
cellReference = new CellReference(sheet+"!$A1");
|
cellReference = new CellReference(sheet+"!$A1");
|
||||||
assertFalse(cellReference.isRowAbsolute());
|
assertFalse(cellReference.isRowAbsolute());
|
||||||
|
@ -95,18 +105,26 @@ public final class TestCellReference {
|
||||||
|
|
||||||
cellReference = new CellReference(null, 0, 0, false, false);
|
cellReference = new CellReference(null, 0, 0, false, false);
|
||||||
assertEquals("A1", cellReference.formatAsString());
|
assertEquals("A1", cellReference.formatAsString());
|
||||||
|
assertEquals("A1", cellReference.formatAsString(true));
|
||||||
|
assertEquals("A1", cellReference.formatAsString(false));
|
||||||
|
|
||||||
//absolute references
|
//absolute references
|
||||||
cellReference = new CellReference(null, 0, 0, true, false);
|
cellReference = new CellReference(null, 0, 0, true, false);
|
||||||
assertEquals("A$1", cellReference.formatAsString());
|
assertEquals("A$1", cellReference.formatAsString());
|
||||||
|
assertEquals("A$1", cellReference.formatAsString(true));
|
||||||
|
assertEquals("A$1", cellReference.formatAsString(false));
|
||||||
|
|
||||||
//sheet name with no spaces
|
//sheet name with no spaces
|
||||||
cellReference = new CellReference("Sheet1", 0, 0, true, false);
|
cellReference = new CellReference("Sheet1", 0, 0, true, false);
|
||||||
assertEquals("Sheet1!A$1", cellReference.formatAsString());
|
assertEquals("Sheet1!A$1", cellReference.formatAsString());
|
||||||
|
assertEquals("Sheet1!A$1", cellReference.formatAsString(true));
|
||||||
|
assertEquals("A$1", cellReference.formatAsString(false));
|
||||||
|
|
||||||
//sheet name with spaces
|
//sheet name with spaces
|
||||||
cellReference = new CellReference("Sheet 1", 0, 0, true, false);
|
cellReference = new CellReference("Sheet 1", 0, 0, true, false);
|
||||||
assertEquals("'Sheet 1'!A$1", cellReference.formatAsString());
|
assertEquals("'Sheet 1'!A$1", cellReference.formatAsString());
|
||||||
|
assertEquals("'Sheet 1'!A$1", cellReference.formatAsString(true));
|
||||||
|
assertEquals("A$1", cellReference.formatAsString(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -474,6 +492,11 @@ public final class TestCellReference {
|
||||||
final CellReference badCellRef = new CellReference(cell);
|
final CellReference badCellRef = new CellReference(cell);
|
||||||
|
|
||||||
assertEquals("'Ctor test'!$A$1", goodCellRef.formatAsString());
|
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());
|
||||||
|
assertEquals("'Ctor test'!A1", badCellRef.formatAsString(true));
|
||||||
|
assertEquals("A1", badCellRef.formatAsString(false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue