From: Josh Micich Date: Wed, 17 Sep 2008 21:54:32 +0000 (+0000) Subject: merged 696075,696084 from trunk - (Fix for bug 45805 - 16-bit signed/unsigned problem... X-Git-Tag: REL_3_5_BETA3~12 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=b3f56e20b2a20a6e7a423c80e6bf94c92e5eb665;p=poi.git merged 696075,696084 from trunk - (Fix for bug 45805 - 16-bit signed/unsigned problems in HSSFSheet.getColWidth() etc) git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@696475 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/contrib/src/org/apache/poi/hssf/contrib/view/SViewerPanel.java b/src/contrib/src/org/apache/poi/hssf/contrib/view/SViewerPanel.java index c134ffd546..f4695376d0 100644 --- a/src/contrib/src/org/apache/poi/hssf/contrib/view/SViewerPanel.java +++ b/src/contrib/src/org/apache/poi/hssf/contrib/view/SViewerPanel.java @@ -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.getColumnWidth(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); diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml index 9232093024..c5a8c7441d 100644 --- a/src/documentation/content/xdocs/changes.xml +++ b/src/documentation/content/xdocs/changes.xml @@ -67,6 +67,7 @@ Created a common interface for handling Excel files, irrespective of if they are .xls or .xlsx + 45805 - Fixed 16-bit signed/unsigned bug in HSSFSheet.getColWidth etc 45780 - Fixed HSSFSheet.shiftRows to also update Area refs 45804 - Update HSMF to handle Outlook 3.0 msg files, which have a different string chunk type Expose the name of Named Cell Styles via HSSFCellStyle (normally held on the parent style though) diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 42633cbdf7..e6ef37a8ba 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -64,6 +64,7 @@ Created a common interface for handling Excel files, irrespective of if they are .xls or .xlsx + 45805 - Fixed 16-bit signed/unsigned bug in HSSFSheet.getColWidth etc 45780 - Fixed HSSFSheet.shiftRows to also update Area refs 45804 - Update HSMF to handle Outlook 3.0 msg files, which have a different string chunk type Expose the name of Named Cell Styles via HSSFCellStyle (normally held on the parent style though) diff --git a/src/java/org/apache/poi/hssf/dev/HSSF.java b/src/java/org/apache/poi/hssf/dev/HSSF.java index 6583b94c62..07baa3a2ba 100644 --- a/src/java/org/apache/poi/hssf/dev/HSSF.java +++ b/src/java/org/apache/poi/hssf/dev/HSSF.java @@ -135,8 +135,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.setColumnWidth(cellnum + 1, (int)(50 * 8 / 0.05)); if ((rownum % 2) == 0) { c.setCellStyle(cs2); diff --git a/src/java/org/apache/poi/hssf/model/Sheet.java b/src/java/org/apache/poi/hssf/model/Sheet.java index 164399939a..ba62b225c5 100644 --- a/src/java/org/apache/poi/hssf/model/Sheet.java +++ b/src/java/org/apache/poi/hssf/model/Sheet.java @@ -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 ); } diff --git a/src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java b/src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java index 32aef3a6c3..bd04a636f2 100644 --- a/src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java +++ b/src/java/org/apache/poi/hssf/record/ColumnInfoRecord.java @@ -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 diff --git a/src/java/org/apache/poi/hssf/record/DefaultColWidthRecord.java b/src/java/org/apache/poi/hssf/record/DefaultColWidthRecord.java index 6a38f4d2ba..ff6270be01 100644 --- a/src/java/org/apache/poi/hssf/record/DefaultColWidthRecord.java +++ b/src/java/org/apache/poi/hssf/record/DefaultColWidthRecord.java @@ -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,14 +14,13 @@ 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

+ * Title: Default Column Width Record (0x0055)

* Description: Specifies the default width for columns that have no specific * width set.

* REFERENCE: PG 302 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)

@@ -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(); } diff --git a/src/java/org/apache/poi/hssf/record/aggregates/ColumnInfoRecordsAggregate.java b/src/java/org/apache/poi/hssf/record/aggregates/ColumnInfoRecordsAggregate.java index 0f405bd111..d1dfe30c50 100644 --- a/src/java/org/apache/poi/hssf/record/aggregates/ColumnInfoRecordsAggregate.java +++ b/src/java/org/apache/poi/hssf/record/aggregates/ColumnInfoRecordsAggregate.java @@ -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 ci 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() ); diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java b/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java index 7327fc1833..1afb30f5a6 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java @@ -160,9 +160,9 @@ public class HSSFPicture return anchor; } - private float getColumnWidthInPixels(short column){ + private float getColumnWidthInPixels(int column){ - short cw = patriarch.sheet.getColumnWidth(column); + int cw = patriarch.sheet.getColumnWidth(column); float px = getPixelWidth(column); return cw/px; @@ -178,10 +178,10 @@ public class HSSFPicture return height/PX_ROW; } - private float getPixelWidth(short column){ + private float getPixelWidth(int column){ int def = patriarch.sheet.getDefaultColumnWidth()*256; - short cw = patriarch.sheet.getColumnWidth(column); + int cw = patriarch.sheet.getColumnWidth(column); return cw == def ? PX_DEFAULT : PX_MODIFIED; } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java index 231942f440..eb37a57ce8 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java @@ -395,48 +395,75 @@ public class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet } + /** + * @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 #setColumnWidth(int, int)} + */ + public void setColumnWidth(short columnIndex, short width) { + setColumnWidth(columnIndex & 0xFFFF, width & 0xFFFF); + } + + /** + * @deprecated (Sep 2008) use {@link #getColumnWidth(int)} + */ + public short getColumnWidth(short columnIndex) { + return (short)getColumnWidth(columnIndex & 0xFFFF); + } + + /** + * @deprecated (Sep 2008) use {@link #setDefaultColumnWidth(int)} + */ + public void setDefaultColumnWidth(short width) { + setDefaultColumnWidth(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 - false 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 setColumnWidth(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 getColumnWidth(int columnIndex) { + return sheet.getColumnWidth(columnIndex); } /** @@ -444,20 +471,25 @@ public class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet * characters * @return default column width */ - - public short getDefaultColumnWidth() - { + public int getDefaultColumnWidth() { 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 setDefaultColumnWidth(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(); } @@ -472,17 +504,6 @@ public class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet 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) @@ -1005,19 +1026,19 @@ public class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet /** * 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 @@ -1630,7 +1651,7 @@ public class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet * @param style the style to set */ public void setDefaultColumnStyle(short column, CellStyle style) { - sheet.setColumn(column, new Short(((HSSFCellStyle) style).getIndex()), null, null, null, null); + sheet.setDefaultColumnStyle(column, style.getIndex()); } /** diff --git a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java index 18ec51b8a3..6c7343d00c 100644 --- a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java +++ b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java @@ -19,7 +19,9 @@ package org.apache.poi.ss.usermodel; import java.util.Iterator; +import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.util.PaneInformation; +import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.Region; public interface Sheet extends Iterable { @@ -96,37 +98,65 @@ public interface Sheet extends Iterable { int getLastRowNum(); + + + /** + * @deprecated (Sep 2008) use {@link #setColumnHidden(int, boolean)} + */ + void setColumnHidden(short columnIndex, boolean hidden); + /** + * @deprecated (Sep 2008) use {@link #isColumnHidden(int)} + */ + boolean isColumnHidden(short columnIndex); + + /** + * @deprecated (Sep 2008) use {@link #setColumnWidth(int, int)} + */ + void setColumnWidth(short columnIndex, short width); + + /** + * @deprecated (Sep 2008) use {@link #getColumnWidth(int)} + */ + short getColumnWidth(short columnIndex); + + /** + * @deprecated (Sep 2008) use {@link #setDefaultColumnWidth(int)} + */ + void setDefaultColumnWidth(short width); + /** * 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 */ - - void setColumnHidden(short column, boolean hidden); + void setColumnHidden(int columnIndex, boolean 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 - false if the column is visible */ - - boolean isColumnHidden(short column); + boolean isColumnHidden(int 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 */ - - void setColumnWidth(short column, short width); + void setColumnWidth(int columnIndex, int 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 */ - - short getColumnWidth(short column); + int getColumnWidth(int columnIndex); + /** + * 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(int width); /** * get the default column width for the sheet (if the columns do not define their own width) in @@ -134,7 +164,7 @@ public interface Sheet extends Iterable { * @return default column width */ - short getDefaultColumnWidth(); + int getDefaultColumnWidth(); /** * get the default row height for the sheet (if the rows do not define their own height) in @@ -152,14 +182,6 @@ public interface Sheet extends Iterable { float getDefaultRowHeightInPoints(); - /** - * set the default column width for the sheet (if the columns do not define their own width) in - * characters - * @param width default column width - */ - - void setDefaultColumnWidth(short 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) @@ -190,12 +212,17 @@ public interface Sheet extends Iterable { void setGridsPrinted(boolean value); + /** * adds a merged region of cells (hence those cells form one) * @param region (rowfrom/colfrom-rowto/colto) to merge * @return index of this region */ + int addMergedRegion(CellRangeAddress region); + /** + * @deprecated (Aug-2008) use {@link #addMergedRegion(CellRangeAddress)} + */ int addMergedRegion(Region region); /** diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index c2b2dccdb6..0e89964b3b 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -35,6 +35,7 @@ import org.apache.poi.ss.usermodel.Patriarch; import org.apache.poi.ss.usermodel.PrintSetup; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellReference; import org.apache.poi.ss.util.Region; import org.apache.poi.xssf.model.CommentsTable; @@ -224,6 +225,12 @@ public class XSSFSheet implements Sheet { protected CTSheet getSheet() { return this.sheet; } + public int addMergedRegion(CellRangeAddress cra) { + Region r = new Region(cra.getFirstRow(), (short)cra.getFirstColumn(), + cra.getLastRow(), (short)cra.getLastColumn()); + return addMergedRegion(r); + } + public int addMergedRegion(Region region) { addNewMergeCell(region); @@ -345,12 +352,15 @@ public class XSSFSheet implements Sheet { return worksheet.getColBreaks(); } + public int getColumnWidth(int columnIndex) { + return (int) columnHelper.getColumn(columnIndex, false).getWidth(); + } public short getColumnWidth(short column) { - return (short) columnHelper.getColumn(column, false).getWidth(); + return (short) getColumnWidth(column & 0xFFFF); } - public short getDefaultColumnWidth() { - return (short) getSheetTypeSheetFormatPr().getDefaultColWidth(); + public int getDefaultColumnWidth() { + return (int)getSheetTypeSheetFormatPr().getDefaultColWidth(); } public short getDefaultRowHeight() { @@ -714,8 +724,11 @@ public class XSSFSheet implements Sheet { return false; } + public boolean isColumnHidden(int columnIndex) { + return columnHelper.getColumn(columnIndex, false).getHidden(); + } public boolean isColumnHidden(short column) { - return columnHelper.getColumn(column, false).getHidden(); + return isColumnHidden(column & 0xFFFF); } public boolean isDisplayFormulas() { @@ -839,20 +852,29 @@ public class XSSFSheet implements Sheet { } + public void setColumnHidden(int columnIndex, boolean hidden) { + columnHelper.setColHidden(columnIndex, hidden); + } public void setColumnHidden(short column, boolean hidden) { - columnHelper.setColHidden(column, hidden); + setColumnHidden(column & 0xFFFF, hidden); } + public void setColumnWidth(int columnIndex, int width) { + columnHelper.setColWidth(columnIndex, width); + } public void setColumnWidth(short column, short width) { - columnHelper.setColWidth(column, width); + setColumnWidth(column & 0xFFFF, width & 0xFFFF); } public void setDefaultColumnStyle(short column, CellStyle style) { columnHelper.setColDefaultStyle(column, style); } + public void setDefaultColumnWidth(int width) { + getSheetTypeSheetFormatPr().setDefaultColWidth(width); + } public void setDefaultColumnWidth(short width) { - getSheetTypeSheetFormatPr().setDefaultColWidth((double) width); + setDefaultColumnWidth(width & 0xFFFF); } public void setDefaultRowHeight(short height) { diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index 8954656c6e..e62795f56a 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -204,24 +204,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= 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.getColumnWidth(0) >= minWithRow1And2); + assertTrue("Column autosized with only one row: wrong width", sheet.getColumnWidth(0) <= maxWithRow1And2); //create a region over the 2nd row and auto size the first column sheet.addMergedRegion(new CellRangeAddress(1,1,0,1)); @@ -693,16 +693,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.getColumnWidth(0) >= minWithRow1Only); + assertTrue(sheet2.getColumnWidth(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.getColumnWidth(0) >= minWithRow1And2); + assertTrue(sheet3.getColumnWidth(0) <= maxWithRow1And2); } /** @@ -786,7 +786,7 @@ 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.getColumnWidth(idx); assertEquals(ref[idx], w); } @@ -795,24 +795,24 @@ public final class TestHSSFSheet extends TestCase { 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 + int w = sh.getColumnWidth(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); + sh.setDefaultColumnWidth(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)); + assertEquals(256*10, sh.getColumnWidth(0)); + assertEquals(256*10, sh.getColumnWidth(1)); + assertEquals(256*10, sh.getColumnWidth(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.setColumnWidth(i, w); + assertEquals(w, sh.getColumnWidth(i)); } //serialize and read again @@ -821,14 +821,18 @@ public final class TestHSSFSheet extends TestCase { 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)); + assertEquals(256*10, sh.getColumnWidth(0)); + assertEquals(256*10, sh.getColumnWidth(1)); + assertEquals(256*10, sh.getColumnWidth(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.getColumnWidth(i)); } + + // check for 16-bit signed/unsigned error: + sh.setColumnWidth(0, 40000); + assertEquals(40000, sh.getColumnWidth(0)); } /**