]> source.dussan.org Git - poi.git/commitdiff
add test case for bug 61701 and use StringBuilder in more places
authorPJ Fanning <fanningpj@apache.org>
Tue, 31 Oct 2017 09:48:23 +0000 (09:48 +0000)
committerPJ Fanning <fanningpj@apache.org>
Tue, 31 Oct 2017 09:48:23 +0000 (09:48 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1813863 13f79535-47bb-0310-9956-ffa450edef68

19 files changed:
src/java/org/apache/poi/hssf/model/LinkTable.java
src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
src/java/org/apache/poi/ss/formula/SheetNameFormatter.java
src/java/org/apache/poi/ss/formula/functions/Address.java
src/java/org/apache/poi/ss/formula/ptg/Area3DPxg.java
src/java/org/apache/poi/ss/formula/ptg/Deleted3DPxg.java
src/java/org/apache/poi/ss/formula/ptg/ExternSheetNameResolver.java
src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java
src/java/org/apache/poi/ss/formula/ptg/Ref3DPxg.java
src/java/org/apache/poi/ss/util/AreaReference.java
src/java/org/apache/poi/ss/util/CellReference.java
src/ooxml/java/org/apache/poi/POIXMLTextExtractor.java
src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExcelExtractor.java
src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
src/ooxml/testcases/org/apache/poi/xssf/AllXSSFTests.java
src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java
src/testcases/org/apache/poi/POIDataSamples.java

index 0dc7f53eb971ae294894fae51ceadfdcc41947d0..b55e7b952fa009b3d61ac4824d4b511099adc06d 100644 (file)
@@ -547,8 +547,8 @@ final class LinkTable {
                    // 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);
index 01324e5716770598e4fc115bd40d5c46fe9a9dc1..8b0697483f607eb4dec0cca54d55b34bc57e56df 100644 (file)
@@ -1650,7 +1650,7 @@ public final class HSSFWorkbook extends POIDocument implements org.apache.poi.ss
             // 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(",");
index 7f4f5b86cbf80b96a5469a2072419e2568541f2b..c6e13c311069ca6bcb933640b2859a2078d37129 100644 (file)
@@ -47,15 +47,17 @@ public final class SheetNameFormatter {
         * 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);
@@ -67,6 +69,10 @@ public final class SheetNameFormatter {
                        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) {
@@ -84,17 +90,54 @@ public final class SheetNameFormatter {
                }
        }
 
-       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();
index 29aeae69302e1588d4ca65acccd8cdcb1da73748..ea5244c1eb2d998df9d471e9f5a58503af85ddf5 100644 (file)
@@ -87,7 +87,7 @@ public class Address implements Function {
             }
 
             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('!');
index abb2dfaedee4fad7465d94ba0ad8e318a2de2c36..65f59e83e1187337d22c237e6bda43a8b9bf2c88 100644 (file)
@@ -101,7 +101,7 @@ public final class Area3DPxg extends AreaPtgBase implements Pxg3D {
     }
     
     public String toFormulaString() {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder(64);
         if (externalWorkbookNumber >= 0) {
             sb.append('[');
             sb.append(externalWorkbookNumber);
index b1b58d6eab1d3a074f675e060eea372c9844fd90..84e4a0de163b88ced1c2b279da0ab010052e9fe9 100644 (file)
@@ -65,7 +65,7 @@ public final class Deleted3DPxg extends OperandPtg implements Pxg {
     }
 
     public String toFormulaString() {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder(64);
         if (externalWorkbookNumber >= 0) {
             sb.append('[');
             sb.append(externalWorkbookNumber);
index a61d1d5752a82a78b051934baa8200e4f724aa67..c1989e17dba77b4cc461070c060dfd13fecbeb97 100644 (file)
@@ -32,15 +32,15 @@ final class ExternSheetNameResolver {
 
     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) {
@@ -53,7 +53,7 @@ final class ExternSheetNameResolver {
         } 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
index 8969ad47bf9e7a41d494e8e953eb65c3b13811bf..9da79beec83196d86fe6d3e6380742cc1aef3aac 100644 (file)
@@ -76,7 +76,7 @@ public final class NameXPxg extends OperandPtg implements Pxg {
     }
 
     public String toFormulaString() {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder(64);
         boolean needsExclamation = false;
         if (externalWorkbookNumber >= 0) {
             sb.append('[');
index 3b78c5a4b09377bd2a0e635f29d2d78f32349c52..67f73b360dcc4d3553b277c72105c64eef7e9bb6 100644 (file)
@@ -100,7 +100,7 @@ public final class Ref3DPxg extends RefPtgBase implements Pxg3D {
     }
 
     public String toFormulaString() {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder(64);
         if (externalWorkbookNumber >= 0) {
             sb.append('[');
             sb.append(externalWorkbookNumber);
index 7cf3b73c4142386bfd8b30bdf3d09f0ec59a4926..821413af118f37cc7dd34d040db9ef98c7ab4b69 100644 (file)
@@ -295,8 +295,8 @@ public class AreaReference {
                 + ":" +
                 CellReference.convertNumToColString(_lastCell.getCol());
         }
-        
-        StringBuffer sb = new StringBuffer(32);
+
+        StringBuilder sb = new StringBuilder(32);
         sb.append(_firstCell.formatAsString());
         if(!_isSingleCell) {
             sb.append(CELL_DELIMITER);
@@ -311,10 +311,14 @@ public class AreaReference {
     }
 
     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();
     }
 
index b6be13936d1d6c7f096cb3a43154f9e8816e60ec..d14670221f5432bff3fe494753c6fa71df0ae35f 100644 (file)
@@ -484,7 +484,7 @@ public class CellReference {
      * @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);
@@ -523,7 +523,7 @@ public class CellReference {
      * 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);
index 954feb80efaadcfc28feb30d1ad5d7938e61657a..26b2cd84c2e3317dd4d9786f5d546deb6fd7017d 100644 (file)
@@ -104,7 +104,7 @@ public abstract class POIXMLTextExtractor extends POITextExtractor {
                super.close();
        }
 
-       protected void checkMaxTextSize(StringBuffer text, String string) {
+       protected void checkMaxTextSize(CharSequence text, String string) {
         if(string == null) {
             return;
         }
index bb095c78d57d45ccc3773ede3bb03b9994300534..81b93ab4638a30150926be87a7a6fd53eec68231 100644 (file)
@@ -135,7 +135,7 @@ public class XSSFExcelExtractor extends POIXMLTextExtractor
             formatter = new DataFormatter(locale);
         }
 
-        StringBuffer text = new StringBuffer();
+        StringBuilder text = new StringBuilder(64);
         for(Sheet sh : workbook) {
             XSSFSheet sheet = (XSSFSheet) sh;
             if(includeSheetNames) {
@@ -229,13 +229,13 @@ public class XSSFExcelExtractor extends POIXMLTextExtractor
         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();
index 711cd489459be38f4ad26ee40303b2353f42cb6e..c8d2f7674f56373221706b40cb104ce53a8558cf 100644 (file)
@@ -121,7 +121,7 @@ public class SXSSFRow implements Row, Comparable<SXSSFRow>
     {
         return createCell(column, CellType.BLANK);
     }
-    
+
     /**
      * Use this to create new cells within the row and return it.
      * <p>
index 575b01c994d1fe04aa0f50dc74c76e0ff789c621..e56af69d9a35ec09bd8e653cd40c5d54a35659bb 100644 (file)
@@ -283,7 +283,7 @@ public final class XSSFName implements Name {
      * 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()) {
index 67a82510de9e6c0ff93ca600beb6faf8c9705dc3..1916ef50b78606fdfe559195c71cc1c3f372e1ad 100644 (file)
@@ -1490,13 +1490,13 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
         //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());
index c6e2f7ecaa57473c24b8e320dfb3633838912922..93f35aac49d7c29bbdb07f48f9c5547be51c7f51 100644 (file)
@@ -18,7 +18,6 @@
 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;
@@ -29,14 +28,13 @@ import org.apache.poi.xssf.util.TestNumericRanges;
 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,
index c70a24cebce2bcd9df053debde1d2fcb2c51d103..5e27ad61c04deee867cafeebf01027a1a1c647b0 100644 (file)
@@ -19,6 +19,7 @@ package org.apache.poi.xssf.eventusermodel;
 
 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;
@@ -29,6 +30,8 @@ import java.util.HashSet;
 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;
@@ -36,21 +39,23 @@ import org.apache.poi.xssf.model.StylesTable;
 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());
 
@@ -58,6 +63,7 @@ public final class TestXSSFReader extends TestCase {
                assertNotNull(r.getStylesTable());
        }
 
+    @Test
        public void testStyles() throws Exception {
                OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"));
 
@@ -74,6 +80,7 @@ public final class TestXSSFReader extends TestCase {
       assertNotNull(r.getThemesData());
        }
 
+    @Test
        public void testStrings() throws Exception {
         OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"));
 
@@ -83,6 +90,7 @@ public final class TestXSSFReader extends TestCase {
                assertEquals("Test spreadsheet", new XSSFRichTextString(r.getSharedStringsTable().getEntryAt(0)).toString());
        }
 
+    @Test
        public void testSheets() throws Exception {
         OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"));
 
@@ -115,6 +123,7 @@ public final class TestXSSFReader extends TestCase {
         * 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"));
 
@@ -134,7 +143,8 @@ public final class TestXSSFReader extends TestCase {
                }
                assertEquals(4, count);
        }
-       
+
+    @Test
        public void testComments() throws Exception {
       OPCPackage pkg =  XSSFTestDataSamples.openSamplePackage("comments.xlsx");
       XSSFReader r = new XSSFReader(pkg);
@@ -163,6 +173,7 @@ public final class TestXSSFReader extends TestCase {
     *  XSSFReader method
     * @throws Exception
     */
+   @Test
    public void test50119() throws Exception {
       OPCPackage pkg =  XSSFTestDataSamples.openSamplePackage("WithChartSheet.xlsx");
       XSSFReader r = new XSSFReader(pkg);
@@ -180,6 +191,7 @@ public final class TestXSSFReader extends TestCase {
      *
      * @throws Exception
      */
+    @Test
     public void testShapes() throws Exception {
         OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("WithTextBox.xlsx");
         XSSFReader r = new XSSFReader(pkg);
@@ -208,6 +220,7 @@ public final class TestXSSFReader extends TestCase {
         return sb.toString();
     }
 
+    @Test
     public void testBug57914() throws Exception {
         OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("57914.xlsx");
         final XSSFReader r;
@@ -234,6 +247,7 @@ public final class TestXSSFReader extends TestCase {
     * 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);
@@ -256,6 +270,7 @@ public final class TestXSSFReader extends TestCase {
      * 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);
@@ -283,6 +298,7 @@ public final class TestXSSFReader extends TestCase {
      * While this one works correctly:
      * &lt;sheet name="Sheet6" sheetId="4" r:id="rId6"/&gt;
      */
+    @Test
     public void test61034() throws Exception {
         OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("61034.xlsx");
         XSSFReader reader = new XSSFReader(pkg);
@@ -297,4 +313,13 @@ public final class TestXSSFReader extends TestCase {
         }
         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());
+        }
+    }
 }
index 4b764c2ee36bff88714fce9452d99aed4c48bd3b..c4a093fe412e28c0263b606f1220f1f1296da42c 100644 (file)
@@ -206,7 +206,7 @@ public final class POIDataSamples {
         }
         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.