]> source.dussan.org Git - poi.git/commitdiff
Fixed inconsistency between HSSFSHeet.getColumnWidth and HSSFSheet.getDefaultColumnWi...
authorYegor Kozlov <yegor@apache.org>
Wed, 2 Apr 2008 10:25:18 +0000 (10:25 +0000)
committerYegor Kozlov <yegor@apache.org>
Wed, 2 Apr 2008 10:25:18 +0000 (10:25 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@643834 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/model/Sheet.java
src/testcases/org/apache/poi/hssf/data/colwidth.xls [new file with mode: 0755]
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java

index 451cde7579481469a7c846f7065813d0c828fe94..2af25e7481bce0c7aeb282258ad90d7d35133a94 100644 (file)
@@ -1879,12 +1879,12 @@ public class Sheet implements Model
     }
 
     /**
-     * get the width of a given column in units of 1/20th of a point width (twips?)
+     * get the width of a given column in units of 1/256th of a character width
      * @param column index
      * @see org.apache.poi.hssf.record.DefaultColWidthRecord
      * @see org.apache.poi.hssf.record.ColumnInfoRecord
      * @see #setColumnWidth(short,short)
-     * @return column width in units of 1/20th of a point (twips?)
+     * @return column width in units of 1/256th of a character width
      */
 
     public short getColumnWidth(short column)
@@ -1912,7 +1912,9 @@ public class Sheet implements Model
         }
         else
         {
-            retval = defaultcolwidth.getColWidth();
+            //default column width is measured in characters
+            //multiply
+            retval = (short)(256*defaultcolwidth.getColWidth());
         }
         return retval;
     }
@@ -1951,9 +1953,9 @@ public class Sheet implements Model
     }
 
     /**
-     * set the width for a given column in 1/20th of a character width units
+     * set the width for a given column in 1/256th of a character width units
      * @param column - the column number
-     * @param width (in units of 1/20th of a character width)
+     * @param width (in units of 1/256th of a character width)
      */
     public void setColumnWidth(short column, short width)
     {
diff --git a/src/testcases/org/apache/poi/hssf/data/colwidth.xls b/src/testcases/org/apache/poi/hssf/data/colwidth.xls
new file mode 100755 (executable)
index 0000000..7ffd3a4
Binary files /dev/null and b/src/testcases/org/apache/poi/hssf/data/colwidth.xls differ
index a4a31feabf93fc380714136a96367e8c49b3abc8..13eafa4fd89b6bf0b7495e55f15baad5ef45aff6 100644 (file)
@@ -870,5 +870,65 @@ public class TestHSSFSheet
     
     public static void main(java.lang.String[] args) {
                 junit.textui.TestRunner.run(TestHSSFSheet.class);
-       }    
+       }
+
+    public void testColumnWidth() throws Exception {
+        //check we can correctly read column widths from a reference workbook
+        String filename = System.getProperty("HSSF.testdata.path") + "/colwidth.xls";
+        HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(filename));
+
+        //reference values
+        int[] ref = {365, 548, 731, 914, 1097, 1280, 1462, 1645, 1828, 2011, 2194, 2377, 2560, 2742, 2925, 3108, 3291, 3474, 3657};
+
+        HSSFSheet sh = wb.getSheetAt(0);
+        for (char i = 'A'; i <= 'S'; i++) {
+            int idx = i - 'A';
+            int w = sh.getColumnWidth((short)idx);
+            assertEquals(ref[idx], w);
+        }
+
+        //the second sheet doesn't have overridden column widths
+        sh = wb.getSheetAt(1);
+        int def_width = sh.getDefaultColumnWidth();
+        for (char i = 'A'; i <= 'S'; i++) {
+            int idx = i - 'A';
+            int w = sh.getColumnWidth((short)idx);
+            //getDefaultColumnWidth returns width measued in characters
+            //getColumnWidth returns width measued in 1/256th units
+            assertEquals(def_width*256, w);
+        }
+
+        //test new workbook
+        wb = new HSSFWorkbook();
+        sh = wb.createSheet();
+        sh.setDefaultColumnWidth((short)10);
+        assertEquals(10, sh.getDefaultColumnWidth());
+        assertEquals(256*10, sh.getColumnWidth((short)0));
+        assertEquals(256*10, sh.getColumnWidth((short)1));
+        assertEquals(256*10, sh.getColumnWidth((short)2));
+        for (char i = 'D'; i <= 'F'; i++) {
+            short w = (short)(256*12);
+            sh.setColumnWidth((short)i, w);
+            assertEquals(w, sh.getColumnWidth((short)i));
+        }
+
+        //serialize and read again
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        wb.write(out);
+        out.close();
+
+        wb = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray()));
+        sh = wb.getSheetAt(0);
+        assertEquals(10, sh.getDefaultColumnWidth());
+        //columns A-C have default width
+        assertEquals(256*10, sh.getColumnWidth((short)0));
+        assertEquals(256*10, sh.getColumnWidth((short)1));
+        assertEquals(256*10, sh.getColumnWidth((short)2));
+        //columns D-F have custom wodth
+        for (char i = 'D'; i <= 'F'; i++) {
+            short w = (short)(256*12);
+            assertEquals(w, sh.getColumnWidth((short)i));
+        }
+
+    }
 }