// Workbook scoped name, not actually external after all
NameRecord nr = getNameRecord(definedNameIndex);
int sheetNumber = nr.getSheetNumber();
-
- StringBuffer text = new StringBuffer();
+
+ StringBuilder text = new StringBuilder(64);
if (sheetNumber > 0) {
String sheetName = workbook.getSheetName(sheetNumber-1);
SheetNameFormatter.appendFormat(text, sheetName);
// adding one here because 0 indicates a global named region; doesn't make sense for print areas
}
String[] parts = COMMA_PATTERN.split(reference);
- StringBuffer sb = new StringBuffer(32);
+ StringBuilder sb = new StringBuilder(32);
for (int i = 0; i < parts.length; i++) {
if(i>0) {
sb.append(",");
* sheet name will be converted to double single quotes ('').
*/
public static String format(String rawSheetName) {
- StringBuffer sb = new StringBuffer(rawSheetName.length() + 2);
+ StringBuilder sb = new StringBuilder(rawSheetName.length() + 2);
appendFormat(sb, rawSheetName);
return sb.toString();
}
/**
* Convenience method for ({@link #format(String)}) when a StringBuffer is already available.
- *
- * @param out - sheet name will be appended here possibly with delimiting quotes
+ *
+ * @param out - sheet name will be appended here possibly with delimiting quotes
+ * @param rawSheetName - sheet name
+ * @deprecated use <code>appendFormat(StringBuilder out, String rawSheetName)</code> instead
*/
public static void appendFormat(StringBuffer out, String rawSheetName) {
boolean needsQuotes = needsDelimiting(rawSheetName);
out.append(rawSheetName);
}
}
+
+ /**
+ * @deprecated use <code>appendFormat(StringBuilder out, String workbookName, String rawSheetName)</code> instead
+ */
public static void appendFormat(StringBuffer out, String workbookName, String rawSheetName) {
boolean needsQuotes = needsDelimiting(workbookName) || needsDelimiting(rawSheetName);
if(needsQuotes) {
}
}
- private static void appendAndEscape(StringBuffer sb, String rawSheetName) {
- int len = rawSheetName.length();
- for(int i=0; i<len; i++) {
- char ch = rawSheetName.charAt(i);
- if(ch == DELIMITER) {
- // single quotes (') are encoded as ('')
- sb.append(DELIMITER);
- }
- sb.append(ch);
+ /**
+ * Convenience method for ({@link #format(String)}) when a StringBuilder is already available.
+ *
+ * @param out - sheet name will be appended here possibly with delimiting quotes
+ * @param rawSheetName - sheet name
+ */
+ public static void appendFormat(StringBuilder out, String rawSheetName) {
+ boolean needsQuotes = needsDelimiting(rawSheetName);
+ if(needsQuotes) {
+ out.append(DELIMITER);
+ appendAndEscape(out, rawSheetName);
+ out.append(DELIMITER);
+ } else {
+ out.append(rawSheetName);
}
}
+ public static void appendFormat(StringBuilder out, String workbookName, String rawSheetName) {
+ boolean needsQuotes = needsDelimiting(workbookName) || needsDelimiting(rawSheetName);
+ if(needsQuotes) {
+ out.append(DELIMITER);
+ out.append('[');
+ appendAndEscape(out, workbookName.replace('[', '(').replace(']', ')'));
+ out.append(']');
+ appendAndEscape(out, rawSheetName);
+ out.append(DELIMITER);
+ } else {
+ out.append('[');
+ out.append(workbookName);
+ out.append(']');
+ out.append(rawSheetName);
+ }
+ }
+
+ private static void appendAndEscape(Appendable sb, String rawSheetName) {
+ int len = rawSheetName.length();
+ for(int i=0; i<len; i++) {
+ char ch = rawSheetName.charAt(i);
+ try {
+ if(ch == DELIMITER) {
+ // single quotes (') are encoded as ('')
+ sb.append(DELIMITER);
+ }
+ sb.append(ch);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
private static boolean needsDelimiting(String rawSheetName) {
int len = rawSheetName.length();
}
CellReference ref = new CellReference(row - 1, col - 1, pAbsRow, pAbsCol);
- StringBuffer sb = new StringBuffer(32);
+ StringBuilder sb = new StringBuilder(32);
if(sheetName != null) {
SheetNameFormatter.appendFormat(sb, sheetName);
sb.append('!');
}
public String toFormulaString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder(64);
if (externalWorkbookNumber >= 0) {
sb.append('[');
sb.append(externalWorkbookNumber);
}
public String toFormulaString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder(64);
if (externalWorkbookNumber >= 0) {
sb.append('[');
sb.append(externalWorkbookNumber);
public static String prependSheetName(FormulaRenderingWorkbook book, int field_1_index_extern_sheet, String cellRefText) {
ExternalSheet externalSheet = book.getExternalSheet(field_1_index_extern_sheet);
- StringBuffer sb;
+ StringBuilder sb;
if (externalSheet != null) {
String wbName = externalSheet.getWorkbookName();
String sheetName = externalSheet.getSheetName();
if (wbName != null) {
- sb = new StringBuffer(wbName.length() + sheetName.length() + cellRefText.length() + 4);
+ sb = new StringBuilder(wbName.length() + sheetName.length() + cellRefText.length() + 4);
SheetNameFormatter.appendFormat(sb, wbName, sheetName);
} else {
- sb = new StringBuffer(sheetName.length() + cellRefText.length() + 4);
+ sb = new StringBuilder(sheetName.length() + cellRefText.length() + 4);
SheetNameFormatter.appendFormat(sb, sheetName);
}
if (externalSheet instanceof ExternalSheetRange) {
} else {
String firstSheetName = book.getSheetFirstNameByExternSheet(field_1_index_extern_sheet);
String lastSheetName = book.getSheetLastNameByExternSheet(field_1_index_extern_sheet);
- sb = new StringBuffer(firstSheetName.length() + cellRefText.length() + 4);
+ sb = new StringBuilder(firstSheetName.length() + cellRefText.length() + 4);
if (firstSheetName.length() < 1) {
// What excel does if sheet has been deleted
sb.append("#REF"); // note - '!' added just once below
}
public String toFormulaString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder(64);
boolean needsExclamation = false;
if (externalWorkbookNumber >= 0) {
sb.append('[');
}
public String toFormulaString() {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder(64);
if (externalWorkbookNumber >= 0) {
sb.append('[');
sb.append(externalWorkbookNumber);
+ ":" +
CellReference.convertNumToColString(_lastCell.getCol());
}
-
- StringBuffer sb = new StringBuffer(32);
+
+ StringBuilder sb = new StringBuilder(32);
sb.append(_firstCell.formatAsString());
if(!_isSingleCell) {
sb.append(CELL_DELIMITER);
}
public String toString() {
- StringBuffer sb = new StringBuffer(64);
+ StringBuilder sb = new StringBuilder(64);
sb.append(getClass().getName()).append(" [");
- sb.append(formatAsString());
- sb.append("]");
+ try {
+ sb.append(formatAsString());
+ } catch(Exception e) {
+ sb.append(e.toString());
+ }
+ sb.append(']');
return sb.toString();
}
* @return the text representation of this cell reference as it would appear in a formula.
*/
public String formatAsString() {
- StringBuffer sb = new StringBuffer(32);
+ StringBuilder sb = new StringBuilder(32);
if(_sheetName != null) {
SheetNameFormatter.appendFormat(sb, _sheetName);
sb.append(SHEET_NAME_DELIMITER);
* Appends cell reference with '$' markers for absolute values as required.
* Sheet name is not included.
*/
- /* package */ void appendCellReference(StringBuffer sb) {
+ /* package */ void appendCellReference(StringBuilder sb) {
if (_colIndex != -1) {
if(_isColAbs) {
sb.append(ABSOLUTE_REFERENCE_MARKER);
super.close();
}
- protected void checkMaxTextSize(StringBuffer text, String string) {
+ protected void checkMaxTextSize(CharSequence text, String string) {
if(string == null) {
return;
}
formatter = new DataFormatter(locale);
}
- StringBuffer text = new StringBuffer();
+ StringBuilder text = new StringBuilder(64);
for(Sheet sh : workbook) {
XSSFSheet sheet = (XSSFSheet) sh;
if(includeSheetNames) {
return text.toString();
}
- private void handleStringCell(StringBuffer text, Cell cell) {
+ private void handleStringCell(StringBuilder text, Cell cell) {
String contents = cell.getRichStringCellValue().getString();
checkMaxTextSize(text, contents);
text.append(contents);
}
- private void handleNonStringCell(StringBuffer text, Cell cell, DataFormatter formatter) {
+ private void handleNonStringCell(StringBuilder text, Cell cell, DataFormatter formatter) {
CellType type = cell.getCellType();
if (type == CellType.FORMULA) {
type = cell.getCachedFormulaResultType();
{
return createCell(column, CellType.BLANK);
}
-
+
/**
* Use this to create new cells within the row and return it.
* <p>
* Get the sheets name which this named range is referenced to
*
* @return sheet name, which this named range referred to.
- * Empty string if the referenced sheet name weas not found.
+ * Empty string if the referenced sheet name was not found.
*/
public String getSheetName() {
if (_ctName.isSetLocalSheetId()) {
//short externSheetIndex = getWorkbook().checkExternSheet(sheetIndex);
//name.setExternSheetNumber(externSheetIndex);
String[] parts = COMMA_PATTERN.split(reference);
- StringBuffer sb = new StringBuffer(32);
+ StringBuilder sb = new StringBuilder(32);
for (int i = 0; i < parts.length; i++) {
if(i>0) {
- sb.append(",");
+ sb.append(',');
}
SheetNameFormatter.appendFormat(sb, getSheetName(sheetIndex));
- sb.append("!");
+ sb.append('!');
sb.append(parts[i]);
}
name.setRefersToFormula(sb.toString());
package org.apache.poi.xssf;
import org.apache.poi.ss.format.TestCellFormatPart;
-import org.apache.poi.xssf.eventusermodel.TestXSSFReader;
import org.apache.poi.xssf.extractor.TestXSSFExcelExtractor;
import org.apache.poi.xssf.io.TestLoadSaveXSSF;
import org.apache.poi.xssf.model.TestCommentsTable;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
-
/**
* Collects all tests for <tt>org.apache.poi.xssf</tt> and sub-packages.
*/
@RunWith(Suite.class)
@Suite.SuiteClasses({
AllXSSFUsermodelTests.class,
- TestXSSFReader.class,
+ //TestXSSFReader.class, //converted to junit4
TestXSSFExcelExtractor.class,
TestLoadSaveXSSF.class,
TestCommentsTable.class,
import static org.apache.poi.POITestCase.assertContains;
import static org.apache.poi.POITestCase.assertNotContained;
+import static org.junit.Assert.*;
import java.io.InputStream;
import java.util.Iterator;
import org.apache.poi.POIDataSamples;
import org.apache.poi.POIXMLException;
import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.ss.usermodel.Name;
+import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.XSSFTestDataSamples;
import org.apache.poi.xssf.model.CommentsTable;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.xssf.usermodel.XSSFShape;
import org.apache.poi.xssf.usermodel.XSSFSimpleShape;
-
-import junit.framework.TestCase;
+import org.junit.Ignore;
+import org.junit.Test;
/**
* Tests for {@link XSSFReader}
*/
-public final class TestXSSFReader extends TestCase {
+public final class TestXSSFReader {
+
private static POIDataSamples _ssTests = POIDataSamples.getSpreadSheetInstance();
+ @Test
public void testGetBits() throws Exception {
OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"));
XSSFReader r = new XSSFReader(pkg);
- assertNotNull(r.getWorkbookData());
+ assertNotNull(r.getWorkbookData());
assertNotNull(r.getSharedStringsData());
assertNotNull(r.getStylesData());
assertNotNull(r.getStylesTable());
}
+ @Test
public void testStyles() throws Exception {
OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"));
assertNotNull(r.getThemesData());
}
+ @Test
public void testStrings() throws Exception {
OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"));
assertEquals("Test spreadsheet", new XSSFRichTextString(r.getSharedStringsTable().getEntryAt(0)).toString());
}
+ @Test
public void testSheets() throws Exception {
OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"));
* Check that the sheet iterator returns sheets in the logical order
* (as they are defined in the workbook.xml)
*/
+ @Test
public void testOrderOfSheets() throws Exception {
OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("reordered_sheets.xlsx"));
}
assertEquals(4, count);
}
-
+
+ @Test
public void testComments() throws Exception {
OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("comments.xlsx");
XSSFReader r = new XSSFReader(pkg);
* XSSFReader method
* @throws Exception
*/
+ @Test
public void test50119() throws Exception {
OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("WithChartSheet.xlsx");
XSSFReader r = new XSSFReader(pkg);
*
* @throws Exception
*/
+ @Test
public void testShapes() throws Exception {
OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("WithTextBox.xlsx");
XSSFReader r = new XSSFReader(pkg);
return sb.toString();
}
+ @Test
public void testBug57914() throws Exception {
OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("57914.xlsx");
final XSSFReader r;
* NPE from XSSFReader$SheetIterator.<init> on XLSX files generated by
* the openpyxl library
*/
+ @Test
public void test58747() throws Exception {
OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("58747.xlsx");
ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(pkg);
* NPE when sheet has no relationship id in the workbook
* 60825
*/
+ @Test
public void testSheetWithNoRelationshipId() throws Exception {
OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("60825.xlsx");
ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(pkg);
* While this one works correctly:
* <sheet name="Sheet6" sheetId="4" r:id="rId6"/>
*/
+ @Test
public void test61034() throws Exception {
OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("61034.xlsx");
XSSFReader reader = new XSSFReader(pkg);
}
pkg.close();
}
+
+ @Test
+ @Ignore("until we fix issue https://bz.apache.org/bugzilla/show_bug.cgi?id=61701")
+ public void test61701() throws Exception {
+ try(Workbook workbook = XSSFTestDataSamples.openSampleWorkbook("simple-table-named-range.xlsx")) {
+ Name name = workbook.getName("total");
+ System.out.println("workbook.getName(\"total\").getSheetName() returned: " + name.getSheetName());
+ }
+ }
}
}
File dataDir = new File(dataDirName, _moduleDir);
if (!dataDir.exists()) {
- throw new RuntimeException("Data dir '" + _moduleDir + " does not exist");
+ throw new RuntimeException("Data dir '" + _moduleDir + "' does not exist");
}
// convert to canonical file, to make any subsequent error messages
// clearer.