-
/* ====================================================================
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.contrib.view;
*
*/
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.
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);
}
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);
<!-- 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>
<!-- 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>
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);
* 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();
}
* 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);
}
* @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());
}
/**
* @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);
}
/**
* @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;
* @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 );
}
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
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
-
/* ====================================================================
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>
* @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()
{
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;
}
/**
* @return defaultwidth for columns
*/
- public short getColWidth()
+ public int getColWidth()
{
return field_1_col_width;
}
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();
}
}
- 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;
/**
* 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() );
private float getColumnWidthInPixels(short column){
- short cw = patriarch.sheet.getColumnWidth(column);
+ int cw = patriarch.sheet.getColWidth(column);
float px = getPixelWidth(column);
return cw/px;
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;
}
}
+ /**
+ * @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);
}
/**
* 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();
}
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)
/**
* 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
* @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());
}
/**
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");
}
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;
/**
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);
// 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());
// 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));
// 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);
}
/**
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));
}
/**