]> source.dussan.org Git - poi.git/commitdiff
Support for reading HSSF column styles
authorNick Burch <nick@apache.org>
Tue, 6 Jan 2009 20:49:02 +0000 (20:49 +0000)
committerNick Burch <nick@apache.org>
Tue, 6 Jan 2009 20:49:02 +0000 (20:49 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@732112 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/changes.xml
src/documentation/content/xdocs/status.xml
src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
src/testcases/org/apache/poi/hssf/data/ColumnStyle1dp.xls [new file with mode: 0755]
src/testcases/org/apache/poi/hssf/data/ColumnStyle1dpColoured.xls [new file with mode: 0755]
src/testcases/org/apache/poi/hssf/data/ColumnStyleNone.xls [new file with mode: 0755]
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java

index 410abba48a24e30e649bab7cafc94abe90210662..139b48f9a06cf2f7edb038b77bdc1cc63688d193 100644 (file)
@@ -37,6 +37,7 @@
 
                <!-- Don't forget to update status.xml too! -->
         <release version="3.5-beta5" date="2008-??-??">
+           <action dev="POI-DEVELOPERS" type="add">Support for reading HSSF column styles</action>
            <action dev="POI-DEVELOPERS" type="fix">Hook up POIXMLTextExtractor.getMetadataTextExtractor() to the already written POIXMLPropertiesTextExtractor</action>
            <action dev="POI-DEVELOPERS" type="fix">46472 - Avoid NPE in HPSFPropertiesExtractor when no properties exist</action>
            <action dev="POI-DEVELOPERS" type="fix">46479 - fixed bugs related to cached formula values and HSSFFormulaEvaluator.evaluateInCell()</action>
index e9e6761cb208fc627409c899931b846cfbc696d0..1af660ed7249605a41d2ddb61851aa793c34a621 100644 (file)
@@ -34,6 +34,7 @@
        <!-- Don't forget to update changes.xml too! -->
     <changes>
         <release version="3.5-beta5" date="2008-??-??">
+           <action dev="POI-DEVELOPERS" type="add">Support for reading HSSF column styles</action>
            <action dev="POI-DEVELOPERS" type="fix">Hook up POIXMLTextExtractor.getMetadataTextExtractor() to the already written POIXMLPropertiesTextExtractor</action>
            <action dev="POI-DEVELOPERS" type="fix">46472 - Avoid NPE in HPSFPropertiesExtractor when no properties exist</action>
            <action dev="POI-DEVELOPERS" type="fix">46479 - fixed bugs related to cached formula values and HSSFFormulaEvaluator.evaluateInCell()</action>
index 9ed29e00f5a72acbf8c594f4d3d0766c534ac6c8..30556bd5541f056498d972efd585049581194f2b 100644 (file)
@@ -36,6 +36,7 @@ import org.apache.poi.hssf.model.Workbook;
 import org.apache.poi.hssf.record.CellValueRecordInterface;
 import org.apache.poi.hssf.record.DVRecord;
 import org.apache.poi.hssf.record.EscherAggregate;
+import org.apache.poi.hssf.record.ExtendedFormatRecord;
 import org.apache.poi.hssf.record.Record;
 import org.apache.poi.hssf.record.RowRecord;
 import org.apache.poi.hssf.record.SCLRecord;
@@ -502,6 +503,23 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
     {
         sheet.setDefaultRowHeight((short) (height * 20));
     }
+    
+    /**
+     * Returns the HSSFCellStyle that applies to the given
+     *  (0 based) column, or null if no style has been
+     *  set for that column
+     */
+    public HSSFCellStyle getColumnStyle(int column) {
+       short styleIndex = sheet.getXFIndexForColAt((short)column);
+       
+       if(styleIndex == 0xf) {
+               // None set
+               return null;
+       }
+       
+        ExtendedFormatRecord xf = book.getExFormatAt(styleIndex);
+        return new HSSFCellStyle(styleIndex, xf, book);
+    }
 
     /**
      * get whether gridlines are printed.
index 9650db2009171d6425aa2f4d673e6226a7d637c3..a6a1662c53feca216a85a494740912e46cc92ad0 100644 (file)
@@ -177,6 +177,19 @@ public interface Sheet extends Iterable<Row> {
      * @param height default row height
      */
     void setDefaultRowHeightInPoints(float height);
+    
+    /**
+     * Returns the CellStyle that applies to the given
+     *  (0 based) column, or null if no style has been
+     *  set for that column
+     */
+    public CellStyle getColumnStyle(int column);
+
+    /**
+     * Sets the CellStyle that applies to the given
+     *  (0 based) column.
+     */
+//    public CellStyle setColumnStyle(int column, CellStyle style);
 
     /**
      * Adds a merged region of cells (hence those cells form one)
index c8de77972deb20d62527a436e3b71bf9e3dac312..10391170a121817b79dd657e19f5ab525f982ce3 100644 (file)
@@ -500,6 +500,17 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
                worksheet.getSheetFormatPr() :
                worksheet.addNewSheetFormatPr();
     }
+    
+    /**
+     * Returns the CellStyle that applies to the given
+     *  (0 based) column, or null if no style has been
+     *  set for that column
+     */
+    public CellStyle getColumnStyle(int column) {
+       // TODO
+       return null;
+    }
+
 
     /**
      * Get whether to display the guts or not,
diff --git a/src/testcases/org/apache/poi/hssf/data/ColumnStyle1dp.xls b/src/testcases/org/apache/poi/hssf/data/ColumnStyle1dp.xls
new file mode 100755 (executable)
index 0000000..1318b0f
Binary files /dev/null and b/src/testcases/org/apache/poi/hssf/data/ColumnStyle1dp.xls differ
diff --git a/src/testcases/org/apache/poi/hssf/data/ColumnStyle1dpColoured.xls b/src/testcases/org/apache/poi/hssf/data/ColumnStyle1dpColoured.xls
new file mode 100755 (executable)
index 0000000..25dd8de
Binary files /dev/null and b/src/testcases/org/apache/poi/hssf/data/ColumnStyle1dpColoured.xls differ
diff --git a/src/testcases/org/apache/poi/hssf/data/ColumnStyleNone.xls b/src/testcases/org/apache/poi/hssf/data/ColumnStyleNone.xls
new file mode 100755 (executable)
index 0000000..3f0128a
Binary files /dev/null and b/src/testcases/org/apache/poi/hssf/data/ColumnStyleNone.xls differ
index 4757223354a93da3c48f384db57a2c6714f36537..c119daa283547fec03a3d7bacdd138b5dcb47f89 100644 (file)
@@ -911,4 +911,43 @@ public final class TestHSSFSheet extends TestCase {
         }
         wb.createSheet(SAME_PREFIX + "Exxxx"); // OK - differs in the 31st char
     }
+    
+    /**
+     * Tests that we can read existing column styles
+     */
+    public void testReadColumnStyles() {
+        HSSFWorkbook wbNone = HSSFTestDataSamples.openSampleWorkbook("ColumnStyleNone.xls");
+        HSSFWorkbook wbSimple = HSSFTestDataSamples.openSampleWorkbook("ColumnStyle1dp.xls");
+        HSSFWorkbook wbComplex = HSSFTestDataSamples.openSampleWorkbook("ColumnStyle1dpColoured.xls");
+       
+        // Presence / absence checks
+        assertNull(wbNone.getSheetAt(0).getColumnStyle(0));
+        assertNull(wbNone.getSheetAt(0).getColumnStyle(1));
+        
+        assertNull(wbSimple.getSheetAt(0).getColumnStyle(0));
+        assertNotNull(wbSimple.getSheetAt(0).getColumnStyle(1));
+        
+        assertNull(wbComplex.getSheetAt(0).getColumnStyle(0));
+        assertNotNull(wbComplex.getSheetAt(0).getColumnStyle(1));
+        
+        // Details checks
+        HSSFCellStyle bs = wbSimple.getSheetAt(0).getColumnStyle(1);
+        assertEquals(62, bs.getIndex());
+        assertEquals("#,##0.0_ ;\\-#,##0.0\\ ", bs.getDataFormatString());
+        assertEquals("Calibri", bs.getFont(wbSimple).getFontName());
+        assertEquals(11*20, bs.getFont(wbSimple).getFontHeight());
+        assertEquals(8, bs.getFont(wbSimple).getColor());
+        assertFalse(bs.getFont(wbSimple).getItalic());
+        assertEquals(HSSFFont.BOLDWEIGHT_NORMAL, bs.getFont(wbSimple).getBoldweight());
+        
+        
+        HSSFCellStyle cs = wbComplex.getSheetAt(0).getColumnStyle(1);
+        assertEquals(62, cs.getIndex());
+        assertEquals("#,##0.0_ ;\\-#,##0.0\\ ", cs.getDataFormatString());
+        assertEquals("Arial", cs.getFont(wbComplex).getFontName());
+        assertEquals(8*20, cs.getFont(wbComplex).getFontHeight());
+        assertEquals(10, cs.getFont(wbComplex).getColor());
+        assertFalse(cs.getFont(wbComplex).getItalic());
+        assertEquals(HSSFFont.BOLDWEIGHT_BOLD, cs.getFont(wbComplex).getBoldweight());
+    }
 }