]> source.dussan.org Git - poi.git/commitdiff
Fix for bug 45805 - 16-bit signed/unsigned problems in HSSFSheet.getColWidth() etc
authorJosh Micich <josh@apache.org>
Tue, 16 Sep 2008 21:38:47 +0000 (21:38 +0000)
committerJosh Micich <josh@apache.org>
Tue, 16 Sep 2008 21:38:47 +0000 (21:38 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@696075 13f79535-47bb-0310-9956-ffa450edef68

13 files changed:
src/contrib/src/org/apache/poi/hssf/contrib/view/SViewerPanel.java
src/documentation/content/xdocs/changes.xml
src/documentation/content/xdocs/status.xml
src/java/org/apache/poi/hssf/dev/HSSF.java
src/java/org/apache/poi/hssf/model/Sheet.java
src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java
src/java/org/apache/poi/hssf/record/DefaultColWidthRecord.java
src/java/org/apache/poi/hssf/record/aggregates/ColumnInfoRecordsAggregate.java
src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java
src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
src/testcases/org/apache/poi/hssf/usermodel/TestDataValidation.java
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java

index c134ffd5460176b2145ecf7d04cb62af1ae9eb5a..c11d781db483eab4cdd89ef10e186137fab2231b 100644 (file)
@@ -1,4 +1,3 @@
-
 /* ====================================================================
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
@@ -15,8 +14,6 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 ==================================================================== */
-        
-
 
 package org.apache.poi.hssf.contrib.view;
 
@@ -47,10 +44,10 @@ public class SViewerPanel extends JPanel {
    *
    */
   private static final int magicCharFactor = 7;
-  /** Reference to the woorkbook that is being displayed*/
-  private HSSFWorkbook wb;
+  /** Reference to the wookbook that is being displayed*/
+  /* package */ HSSFWorkbook wb;
   /** Reference to the tabs component*/
-  private JTabbedPane sheetPane;
+  /* package */ JTabbedPane sheetPane;
   /** Reference to the cell renderer that is used to render all cells*/
   private SVTableCellRenderer cellRenderer;
   /** Reference to the cell editor that is used to edit all cells.
@@ -106,7 +103,7 @@ public class SViewerPanel extends JPanel {
     TableColumnModel columns = sheetView.getColumnModel();
     for (int i=0; i< columns.getColumnCount(); i++) {
       TableColumn column = columns.getColumn(i);
-      short width = sheet.getColumnWidth((short)i);
+      int width = sheet.getColWidth(i);
       //256 is because the width is in 256ths of a character
       column.setPreferredWidth(width/256*magicCharFactor);
     }
@@ -208,7 +205,7 @@ public class SViewerPanel extends JPanel {
     public void actionPerformed(ActionEvent e) {
       int tabIndex = sheetPane.getSelectedIndex();
       if (tabIndex != -1) {
-        String newSheetName = (String)JOptionPane.showInputDialog(sheetPane, "Enter a new Sheetname", "Rename Sheet", JOptionPane.QUESTION_MESSAGE);
+        String newSheetName = JOptionPane.showInputDialog(sheetPane, "Enter a new Sheetname", "Rename Sheet", JOptionPane.QUESTION_MESSAGE);
         if (newSheetName != null) {
           wb.setSheetName(tabIndex, newSheetName);
           sheetPane.setTitleAt(tabIndex, newSheetName);
index 3fb2e549de665e46b6ff7c7a5bfa121a2f59fc18..7f17a4a8d1f498415864e1aa4b9347e8ff4ddb4f 100644 (file)
@@ -37,6 +37,7 @@
 
                <!-- Don't forget to update status.xml too! -->
         <release version="3.2-alpha1" date="2008-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">45805 - Fixed 16-bit signed/unsigned bug in HSSFSheet.getColWidth etc</action>
            <action dev="POI-DEVELOPERS" type="fix">45780 - Fixed HSSFSheet.shiftRows to also update Area refs</action>
            <action dev="POI-DEVELOPERS" type="fix">45804 - Update HSMF to handle Outlook 3.0 msg files, which have a different string chunk type</action>
            <action dev="POI-DEVELOPERS" type="add">Expose the name of Named Cell Styles via HSSFCellStyle (normally held on the parent style though)</action>
index 64b120a5e242331f3d78cfebda041758a5777d2b..743e6d05b91eb4b4d14a8c0bc7e534565dd0edcd 100644 (file)
@@ -34,6 +34,7 @@
        <!-- Don't forget to update changes.xml too! -->
     <changes>
         <release version="3.2-alpha1" date="2008-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">45805 - Fixed 16-bit signed/unsigned bug in HSSFSheet.getColWidth etc</action>
            <action dev="POI-DEVELOPERS" type="fix">45780 - Fixed HSSFSheet.shiftRows to also update Area refs</action>
            <action dev="POI-DEVELOPERS" type="fix">45804 - Update HSMF to handle Outlook 3.0 msg files, which have a different string chunk type</action>
            <action dev="POI-DEVELOPERS" type="add">Expose the name of Named Cell Styles via HSSFCellStyle (normally held on the parent style though)</action>
index c6101e313f6708ab4c6d5c5cffbba77194fa2f85..ecb07672abacc6b6ae4f3082e8ee1b744a5f5b3d 100644 (file)
@@ -134,8 +134,7 @@ public class HSSF
                 c = r.createCell(cellnum + 1,
                                  HSSFCell.CELL_TYPE_STRING);
                 c.setCellValue(new HSSFRichTextString("TEST"));
-                s.setColumnWidth(( short ) (cellnum + 1),
-                                 ( short ) ((50 * 8) / (( double ) 1 / 20)));
+                s.setColWidth(cellnum + 1, (int)(50 * 8 / 0.05));
                 if ((rownum % 2) == 0)
                 {
                     c.setCellStyle(cs2);
index 164399939a514e2d728be4f5533a5e3a235464cb..ba62b225c565e75b51185c36e137cb7efa4522cf 100644 (file)
@@ -973,9 +973,7 @@ public final class Sheet implements Model {
      * get the default column width for the sheet (if the columns do not define their own width)
      * @return default column width
      */
-
-    public short getDefaultColumnWidth()
-    {
+    public int getDefaultColumnWidth() {
         return defaultcolwidth.getColWidth();
     }
 
@@ -1009,9 +1007,7 @@ public final class Sheet implements Model {
      * set the default column width for the sheet (if the columns do not define their own width)
      * @param dcw  default column width
      */
-
-    public void setDefaultColumnWidth(short dcw)
-    {
+    public void setDefaultColumnWidth(int dcw) {
         defaultcolwidth.setColWidth(dcw);
     }
 
@@ -1043,15 +1039,15 @@ public final class Sheet implements Model {
      * @return column width in units of 1/256th of a character width
      */
 
-    public short getColumnWidth(short columnIndex) {
+    public int getColumnWidth(int columnIndex) {
 
         ColumnInfoRecord ci = _columnInfos.findColumnInfo(columnIndex);
         if (ci != null) {
-            return (short)ci.getColumnWidth();
+            return ci.getColumnWidth();
         }
         //default column width is measured in characters
         //multiply
-        return (short)(256*defaultcolwidth.getColWidth());
+        return (256*defaultcolwidth.getColWidth());
     }
 
     /**
@@ -1084,8 +1080,8 @@ public final class Sheet implements Model {
      * @param width
      *            (in units of 1/256th of a character width)
      */
-    public void setColumnWidth(short column, short width) {
-        setColumn( column, new Short(width), null, null, null);
+    public void setColumnWidth(int column, int width) {
+        setColumn(column, null, new Integer(width), null, null, null);
     }
 
     /**
@@ -1096,7 +1092,7 @@ public final class Sheet implements Model {
      * @see #setColumnHidden(short,boolean)
      * @return whether the column is hidden or not.
      */
-    public boolean isColumnHidden(short columnIndex) {
+    public boolean isColumnHidden(int columnIndex) {
         ColumnInfoRecord cir = _columnInfos.findColumnInfo(columnIndex);
         if (cir == null) {
             return false;
@@ -1109,16 +1105,14 @@ public final class Sheet implements Model {
      * @param column - the column number
      * @param hidden - whether the column is hidden or not
      */
-    public void setColumnHidden(short column, boolean hidden)
-    {
-        setColumn( column, null, null, new Boolean(hidden), null);
+    public void setColumnHidden(int column, boolean hidden) {
+        setColumn( column, null, null, null, Boolean.valueOf(hidden), null);
     }
-
-    public void setColumn(short column, Short width, Integer level, Boolean hidden, Boolean collapsed) {
-        _columnInfos.setColumn( column, null, width, level, hidden, collapsed );
+    public void setDefaultColumnStyle(int column, int styleIndex) {
+        setColumn(column, new Short((short)styleIndex), null, null, null, null);
     }
 
-    public void setColumn(short column, Short xfStyle, Short width, Integer level, Boolean hidden, Boolean collapsed) {
+    private void setColumn(int column, Short xfStyle, Integer width, Integer level, Boolean hidden, Boolean collapsed) {
         _columnInfos.setColumn( column, xfStyle, width, level, hidden, collapsed );
     }
 
index 32aef3a6c32e0dc39c4ba7002427131b20d1ae0f..bd04a636f2dbe503466f4afc197dc47d1c169b0a 100644 (file)
@@ -40,7 +40,7 @@ public final class ColumnInfoRecord extends Record {
     private static final BitField outlevel  = BitFieldFactory.getInstance(0x0700);
     private static final BitField collapsed = BitFieldFactory.getInstance(0x1000);
     // Excel seems write values 2, 10, and 260, even though spec says "must be zero"
-    private short                 field_6_reserved;
+    private int                 field_6_reserved;
 
     /**
      * Creates a column info record with default width and format
@@ -64,14 +64,14 @@ public final class ColumnInfoRecord extends Record {
 
     protected void fillFields(RecordInputStream in)
     {
-        field_1_first_col = in.readShort();
-        field_2_last_col  = in.readShort();
-        field_3_col_width = in.readShort();
-        field_4_xf_index  = in.readShort();
-        field_5_options   = in.readShort();
+        field_1_first_col = in.readUShort();
+        field_2_last_col  = in.readUShort();
+        field_3_col_width = in.readUShort();
+        field_4_xf_index  = in.readUShort();
+        field_5_options   = in.readUShort();
         switch(in.remaining()) {
             case 2: // usual case
-                field_6_reserved  = in.readShort();
+                field_6_reserved  = in.readUShort();
                 break;
             case 1:
                 // often COLINFO gets encoded 1 byte short
index 6a38f4d2bace227d7e4cf3ff01f574c2ddac2b8b..ff6270be017e5f122b5a04ad6850d72290b73422 100644 (file)
@@ -1,4 +1,3 @@
-
 /* ====================================================================
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    See the License for the specific language governing permissions and
    limitations under the License.
 ==================================================================== */
-        
 
 package org.apache.poi.hssf.record;
 
 import org.apache.poi.util.LittleEndian;
 
 /**
- * Title:        Default Column Width Record<P>
+ * Title:        Default Column Width Record (0x0055) <P>
  * Description:  Specifies the default width for columns that have no specific
  *               width set.<P>
  * REFERENCE:  PG 302 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P>
@@ -30,12 +28,9 @@ import org.apache.poi.util.LittleEndian;
  * @author Jason Height (jheight at chariot dot net dot au)
  * @version 2.0-pre
  */
-
-public class DefaultColWidthRecord
-    extends Record
-{
-    public final static short sid = 0x55;
-    private short             field_1_col_width;
+public final class DefaultColWidthRecord extends Record {
+    public final static short sid = 0x0055;
+    private int             field_1_col_width;
 
     public DefaultColWidthRecord()
     {
@@ -61,17 +56,17 @@ public class DefaultColWidthRecord
 
     protected void fillFields(RecordInputStream in)
     {
-        field_1_col_width = in.readShort();
+        field_1_col_width = in.readUShort();
     }
 
     /**
      * set the default column width
-     * @param height defaultwidth for columns
+     * @param width defaultwidth for columns
      */
 
-    public void setColWidth(short height)
+    public void setColWidth(int width)
     {
-        field_1_col_width = height;
+        field_1_col_width = width;
     }
 
     /**
@@ -79,7 +74,7 @@ public class DefaultColWidthRecord
      * @return defaultwidth for columns
      */
 
-    public short getColWidth()
+    public int getColWidth()
     {
         return field_1_col_width;
     }
@@ -97,9 +92,9 @@ public class DefaultColWidthRecord
 
     public int serialize(int offset, byte [] data)
     {
-        LittleEndian.putShort(data, 0 + offset, sid);
-        LittleEndian.putShort(data, 2 + offset, ( short ) 0x2);
-        LittleEndian.putShort(data, 4 + offset, getColWidth());
+        LittleEndian.putUShort(data, 0 + offset, sid);
+        LittleEndian.putUShort(data, 2 + offset, 0x2);
+        LittleEndian.putUShort(data, 4 + offset, getColWidth());
         return getRecordSize();
     }
 
index 0f405bd1115b041551af5b186e708968a0d70ee5..d1dfe30c50ed9b5a90a91e6ab3186756126e18cb 100644 (file)
@@ -299,7 +299,7 @@ public final class ColumnInfoRecordsAggregate extends RecordAggregate {
        }
 
 
-       public void setColumn(int targetColumnIx, Short xfIndex, Short width, 
+       public void setColumn(int targetColumnIx, Short xfIndex, Integer width, 
                                        Integer level, Boolean hidden, Boolean collapsed) {
                ColumnInfoRecord ci = null;
                int k  = 0;
@@ -389,13 +389,13 @@ public final class ColumnInfoRecordsAggregate extends RecordAggregate {
        /**
         * Sets all non null fields into the <code>ci</code> parameter.
         */
-       private static void setColumnInfoFields( ColumnInfoRecord ci, Short xfStyle, Short width, 
-                               Integer level, Boolean hidden, Boolean collapsed ) {
+       private static void setColumnInfoFields(ColumnInfoRecord ci, Short xfStyle, Integer width, 
+                               Integer level, Boolean hidden, Boolean collapsed) {
                if (xfStyle != null) {
                        ci.setXFIndex(xfStyle.shortValue());
                }
                if (width != null) {
-                       ci.setColumnWidth(width.shortValue());
+                       ci.setColumnWidth(width.intValue());
                }
                if (level != null) {
                        ci.setOutlineLevel( level.shortValue() );
index 7327fc1833acd7e0f3008eb1e35d8843c6f29994..bc89d1fd842a942daa4d11de0632365728a0f0c3 100644 (file)
@@ -162,7 +162,7 @@ public class HSSFPicture
 
     private float getColumnWidthInPixels(short column){
 
-        short cw = patriarch.sheet.getColumnWidth(column);
+        int cw = patriarch.sheet.getColWidth(column);
         float px = getPixelWidth(column);
 
         return cw/px;
@@ -180,8 +180,8 @@ public class HSSFPicture
 
     private float getPixelWidth(short column){
 
-        int def = patriarch.sheet.getDefaultColumnWidth()*256;
-        short cw = patriarch.sheet.getColumnWidth(column);
+        int def = patriarch.sheet.getDefaultColWidth()*256;
+        int cw = patriarch.sheet.getColWidth(column);
 
         return cw == def ? PX_DEFAULT : PX_MODIFIED;
     }
index 0efafb0fa9a68348f06c279099daf134654d3b65..0439853dfd1ed6709b3a99cd9360c15fd0daeba9 100644 (file)
@@ -389,48 +389,81 @@ public final class HSSFSheet {
     }
 
 
+    /**
+     * @deprecated (Sep 2008) use {@link #setColumnHidden(int, boolean)}
+     */
+    public void setColumnHidden(short columnIndex, boolean hidden) {
+        setColumnHidden(columnIndex & 0xFFFF, hidden);
+    }
+
+    /**
+     * @deprecated (Sep 2008) use {@link #isColumnHidden(int)}
+     */
+    public boolean isColumnHidden(short columnIndex) {
+        return isColumnHidden(columnIndex & 0xFFFF);
+    }
+
+    /**
+     * @deprecated (Sep 2008) use {@link #setColWidth(int, int)}
+     */
+    public void setColumnWidth(short columnIndex, short width) {
+        setColWidth(columnIndex & 0xFFFF, width & 0xFFFF);
+    }
+
+    /**
+     * @deprecated (Sep 2008) use {@link #getColWidth(int)}
+     */
+    public short getColumnWidth(short columnIndex) {
+        return (short)getColWidth(columnIndex & 0xFFFF);
+    }
+
+    /**
+     * @deprecated (Sep 2008) use {@link #getDefaultColWidth()}
+     */
+    public short getDefaultColumnWidth() {
+        return (short) getDefaultColWidth();
+    }
+    /**
+     * @deprecated (Sep 2008) use {@link #setDefaultColWidth(int)}
+     */
+    public void setDefaultColumnWidth(short width) {
+        setDefaultColWidth(width & 0xFFFF);
+    }
+
     /**
      * Get the visibility state for a given column.
-     * @param column - the column to get (0-based)
+     * @param columnIndex - the column to get (0-based)
      * @param hidden - the visiblity state of the column
      */
-
-    public void setColumnHidden(short column, boolean hidden)
-    {
-        sheet.setColumnHidden(column, hidden);
+    public void setColumnHidden(int columnIndex, boolean hidden) {
+        sheet.setColumnHidden(columnIndex, hidden);
     }
 
     /**
      * Get the hidden state for a given column.
-     * @param column - the column to set (0-based)
-     * @return hidden - the visiblity state of the column
+     * @param columnIndex - the column to set (0-based)
+     * @return hidden - <code>false</code> if the column is visible
      */
-
-    public boolean isColumnHidden(short column)
-    {
-        return sheet.isColumnHidden(column);
+    public boolean isColumnHidden(int columnIndex) {
+        return sheet.isColumnHidden(columnIndex);
     }
 
     /**
      * set the width (in units of 1/256th of a character width)
-     * @param column - the column to set (0-based)
+     * @param columnIndex - the column to set (0-based)
      * @param width - the width in units of 1/256th of a character width
      */
-
-    public void setColumnWidth(short column, short width)
-    {
-        sheet.setColumnWidth(column, width);
+    public void setColWidth(int columnIndex, int width) {
+        sheet.setColumnWidth(columnIndex, width);
     }
 
     /**
      * get the width (in units of 1/256th of a character width )
-     * @param column - the column to set (0-based)
+     * @param columnIndex - the column to set (0-based)
      * @return width - the width in units of 1/256th of a character width
      */
-
-    public short getColumnWidth(short column)
-    {
-        return sheet.getColumnWidth(column);
+    public int getColWidth(int columnIndex) {
+        return sheet.getColumnWidth(columnIndex);
     }
 
     /**
@@ -438,20 +471,25 @@ public final class HSSFSheet {
      * characters
      * @return default column width
      */
-
-    public short getDefaultColumnWidth()
-    {
+    public int getDefaultColWidth() {
         return sheet.getDefaultColumnWidth();
     }
+    /**
+     * set the default column width for the sheet (if the columns do not define their own width) in
+     * characters
+     * @param width default column width
+     */
+    public void setDefaultColWidth(int width) {
+        sheet.setDefaultColumnWidth(width);
+    }
+
 
     /**
      * get the default row height for the sheet (if the rows do not define their own height) in
      * twips (1/20 of  a point)
      * @return  default row height
      */
-
-    public short getDefaultRowHeight()
-    {
+    public short getDefaultRowHeight() {
         return sheet.getDefaultRowHeight();
     }
 
@@ -466,17 +504,6 @@ public final class HSSFSheet {
         return (sheet.getDefaultRowHeight() / 20);
     }
 
-    /**
-     * set the default column width for the sheet (if the columns do not define their own width) in
-     * characters
-     * @param width default column width
-     */
-
-    public void setDefaultColumnWidth(short width)
-    {
-        sheet.setDefaultColumnWidth(width);
-    }
-
     /**
      * set the default row height for the sheet (if the rows do not define their own height) in
      * twips (1/20 of  a point)
@@ -999,19 +1026,19 @@ public final class HSSFSheet {
     /**
      * Sets the protection on enabled or disabled
      * @param protect true => protection enabled; false => protection disabled
-         * @deprecated use protectSheet(String, boolean, boolean)
+     * @deprecated (Jul 2007) use {@link #protectSheet(String)}
      */
     public void setProtect(boolean protect) {
         getSheet().getProtect().setProtect(protect);
     }
 
-        /**
-         * Sets the protection enabled as well as the password
-         * @param password to set for protection
-         */
-        public void protectSheet(String password) {
-                getSheet().protectSheet(password, true, true); //protect objs&scenarios(normal)
-        }
+    /**
+     * Sets the protection enabled as well as the password
+     * @param password to set for protection
+     */
+    public void protectSheet(String password) {
+            getSheet().protectSheet(password, true, true); //protect objs&scenarios(normal)
+    }
 
     /**
      * Sets the zoom magnication for the sheet.  The zoom is expressed as a
@@ -1624,7 +1651,7 @@ public final class HSSFSheet {
      * @param style the style to set
      */
     public void setDefaultColumnStyle(short column, HSSFCellStyle style) {
-    sheet.setColumn(column, new Short(style.getIndex()), null, null, null, null);
+        sheet.setDefaultColumnStyle(column, style.getIndex());
     }
 
     /**
index d4bdaf14d13e55daa21afb08cd6b809b81e37e87..6b2d90a9e27cc77fe1299eafa7124718de396cd0 100644 (file)
@@ -202,24 +202,23 @@ public final class TestBugs extends TestCase {
         col_cnt = c;
         rw_cnt = r;
 
-        HSSFRow rw = null ;
-        HSSFCell cell =null;
+        HSSFRow rw ;
         rw = sheet.createRow(0) ;
         //Header row
         for(int j=0; j<col_cnt; j++){
-            cell = rw.createCell(j) ;
+            HSSFCell cell = rw.createCell(j) ;
             setCellText(cell, "Col " + (j+1)) ;
         }
 
         for(int i=1; i<rw_cnt; i++){
             rw = sheet.createRow(i) ;
             for(int j=0; j<col_cnt; j++){
-                cell = rw.createCell(j) ;
+                HSSFCell cell = rw.createCell(j) ;
                 setCellText(cell, "Row:" + (i+1) + ",Column:" + (j+1)) ;
             }
         }
 
-        sheet.setDefaultColumnWidth((short) 18) ;
+        sheet.setDefaultColWidth(18) ;
 
         writeTestOutputFileForViewing(wb, "test22568");
     }
index 1dcba7db92a859a45c69ea58f7ff82022b50c374..40f16c3e5aaef34ca2054943d312eacfaafbc0c2 100644 (file)
@@ -35,7 +35,6 @@ import org.apache.poi.hssf.record.RecordFormatException;
 import org.apache.poi.hssf.util.CellRangeAddress;
 import org.apache.poi.hssf.util.CellRangeAddressList;
 import org.apache.poi.hssf.util.HSSFColor;
-import org.apache.poi.hssf.util.Region;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 
 /**
@@ -269,11 +268,11 @@ public final class TestDataValidation extends TestCase {
                        for (int i = 0; i < 6; i++) {
                                row.createCell(i).setCellStyle(_style_4);
                                if (i == 2 || i == 3 || i == 4) {
-                                       sheet.setColumnWidth((short) i, (short) 3500);
+                                       sheet.setColWidth(i, 3500);
                                } else if (i == 5) {
-                                       sheet.setColumnWidth((short) i, (short) 10000);
+                                       sheet.setColWidth(i, 10000);
                                } else {
-                                       sheet.setColumnWidth((short) i, (short) 8000);
+                                       sheet.setColWidth(i, 8000);
                                }
                        }
                        HSSFCell cell = row.getCell(0);
index e46d27b998a1c75180fb0c35088319b38af0e8b5..880f2809dc9fd3a76f2fced1df57428b5e2b4346 100644 (file)
@@ -434,7 +434,7 @@ public final class TestHSSFSheet extends TestCase {
         // This will tell us that cloneSheet, and by extension,
         // the list forms of createSheet leave us with an accessible
         // ProtectRecord.
-        hssfSheet.setProtect(true);
+        hssfSheet.protectSheet("secret");
         Sheet cloned = sheet.cloneSheet();
         assertNotNull(cloned.getProtect());
         assertTrue(hssfSheet.getProtect());
@@ -681,8 +681,8 @@ public final class TestHSSFSheet extends TestCase {
         // autoSize the first column and check its size before the merged region (1,0,1,1) is set:
         // it has to be based on the 2nd row width
         sheet.autoSizeColumn((short)0);
-        assertTrue("Column autosized with only one row: wrong width", sheet.getColumnWidth((short)0) >= minWithRow1And2);
-        assertTrue("Column autosized with only one row: wrong width", sheet.getColumnWidth((short)0) <= maxWithRow1And2);
+        assertTrue("Column autosized with only one row: wrong width", sheet.getColWidth(0) >= minWithRow1And2);
+        assertTrue("Column autosized with only one row: wrong width", sheet.getColWidth(0) <= maxWithRow1And2);
 
         //create a region over the 2nd row and auto size the first column
         sheet.addMergedRegion(new CellRangeAddress(1,1,0,1));
@@ -692,16 +692,16 @@ public final class TestHSSFSheet extends TestCase {
         // check that the autoSized column width has ignored the 2nd row
         // because it is included in a merged region (Excel like behavior)
         HSSFSheet sheet2 = wb2.getSheet(sheetName);
-        assertTrue(sheet2.getColumnWidth((short)0) >= minWithRow1Only);
-        assertTrue(sheet2.getColumnWidth((short)0) <= maxWithRow1Only);
+        assertTrue(sheet2.getColWidth(0) >= minWithRow1Only);
+        assertTrue(sheet2.getColWidth(0) <= maxWithRow1Only);
 
         // remove the 2nd row merged region and check that the 2nd row value is used to the autoSizeColumn width
         sheet2.removeMergedRegion(1);
         sheet2.autoSizeColumn((short)0);
         HSSFWorkbook wb3 = HSSFTestDataSamples.writeOutAndReadBack(wb2);
         HSSFSheet sheet3 = wb3.getSheet(sheetName);
-        assertTrue(sheet3.getColumnWidth((short)0) >= minWithRow1And2);
-        assertTrue(sheet3.getColumnWidth((short)0) <= maxWithRow1And2);
+        assertTrue(sheet3.getColWidth(0) >= minWithRow1And2);
+        assertTrue(sheet3.getColWidth(0) <= maxWithRow1And2);
     }
 
     /**
@@ -785,49 +785,53 @@ public final class TestHSSFSheet extends TestCase {
         HSSFSheet sh = wb.getSheetAt(0);
         for (char i = 'A'; i <= 'S'; i++) {
             int idx = i - 'A';
-            int w = sh.getColumnWidth((short)idx);
+            int w = sh.getColWidth(idx);
             assertEquals(ref[idx], w);
         }
 
         //the second sheet doesn't have overridden column widths
         sh = wb.getSheetAt(1);
-        int def_width = sh.getDefaultColumnWidth();
+        int def_width = sh.getDefaultColWidth();
         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
+            int w = sh.getColWidth(idx);
+            //getDefaultColumnWidth returns width measured in characters
+            //getColumnWidth returns width measured 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));
+        sh.setDefaultColWidth(10);
+        assertEquals(10, sh.getDefaultColWidth());
+        assertEquals(256*10, sh.getColWidth(0));
+        assertEquals(256*10, sh.getColWidth(1));
+        assertEquals(256*10, sh.getColWidth(2));
         for (char i = 'D'; i <= 'F'; i++) {
-            short w = (short)(256*12);
-            sh.setColumnWidth((short)i, w);
-            assertEquals(w, sh.getColumnWidth((short)i));
+            short w = (256*12);
+            sh.setColWidth(i, w);
+            assertEquals(w, sh.getColWidth(i));
         }
 
         //serialize and read again
         wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
 
         sh = wb.getSheetAt(0);
-        assertEquals(10, sh.getDefaultColumnWidth());
+        assertEquals(10, sh.getDefaultColWidth());
         //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));
+        assertEquals(256*10, sh.getColWidth(0));
+        assertEquals(256*10, sh.getColWidth(1));
+        assertEquals(256*10, sh.getColWidth(2));
         //columns D-F have custom width
         for (char i = 'D'; i <= 'F'; i++) {
-            short w = (short)(256*12);
-            assertEquals(w, sh.getColumnWidth((short)i));
+            short w = (256*12);
+            assertEquals(w, sh.getColWidth(i));
         }
+
+        // check for 16-bit signed/unsigned error:
+        sh.setColWidth(0, 40000);
+        assertEquals(40000, sh.getColWidth(0));
     }
 
     /**