]> source.dussan.org Git - poi.git/commitdiff
Add support for adding a table to a XSSFSheet
authorNick Burch <nick@apache.org>
Fri, 8 Apr 2011 15:07:35 +0000 (15:07 +0000)
committerNick Burch <nick@apache.org>
Fri, 8 Apr 2011 15:07:35 +0000 (15:07 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1090289 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/ooxml/java/org/apache/poi/xssf/model/Table.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java

index 729ba3e89767223795063ca29d405e26722e6cbe..6651b10f2d10aca54803da5238ca2f65007bdc34 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta3" date="2011-??-??">
+           <action dev="poi-developers" type="add">Support for adding a table to a XSSFSheet</action>
            <action dev="poi-developers" type="add">Improve HSMF MAPIMessage access to the HTML and RTF versions of the message body (where available)</action>
            <action dev="poi-developers" type="add">Add new method to HSMF of MAPIMessage.has7BitEncodingStrings() to make it easier to decide when encoding guessing is needed</action>
            <action dev="poi-developers" type="fix">OutlookTextExtractor now requests 7 bit encoding guessing</action>
index 412a425cacba57efa54799e70852f633e370853a..ee887214f4b79500727cb05950073cf2762deba7 100644 (file)
@@ -192,6 +192,17 @@ public class Table extends POIXMLDocumentPart {
        public String getName() {
           return ctTable.getName();
        }
+       
+       /**
+        * Changes the name of the Table
+        */
+       public void setName(String name) {
+          if(name == null) {
+             ctTable.unsetName();
+             return;
+          }
+          ctTable.setName(name);
+       }
 
    /**
     * @return the display name of the Table, if set
@@ -200,6 +211,13 @@ public class Table extends POIXMLDocumentPart {
       return ctTable.getDisplayName();
    }
 
+   /**
+    * Changes the display name of the Table
+    */
+   public void setDisplayName(String name) {
+      ctTable.setDisplayName(name);
+   }
+
        /**
         * @return  the number of mapped table columns (see Open Office XML Part 4: chapter 3.5.1.4)
         */
index 52dc4afeebed6b3885c599a0573bc716b912ad6f..80cfd914766e90e8cd62a763ea7e8c7de75afe2c 100644 (file)
@@ -88,6 +88,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
      * Master shared formula is the first formula in a group of shared formulas is saved in the f element.
      */
     private Map<Integer, CTCellFormula> sharedFormulas;
+    private TreeMap<String,Table> tables;
     private List<CellRangeAddress> arrayFormulas;
     private XSSFDataValidationHelper dataValidationHelper;    
 
@@ -151,6 +152,9 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
                sheetComments = (CommentsTable)p;
                break;
             }
+            if(p instanceof Table) {
+               tables.put( p.getPackageRelationship().getId(), (Table)p );
+            }
         }
         
         // Process external hyperlinks for the sheet, if there are any
@@ -171,6 +175,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
     @SuppressWarnings("deprecation") //YK: getXYZArray() array accessors are deprecated in xmlbeans with JDK 1.5 support
     private void initRows(CTWorksheet worksheet) {
         _rows = new TreeMap<Integer, XSSFRow>();
+        tables = new TreeMap<String, Table>();
         sharedFormulas = new HashMap<Integer, CTCellFormula>();
         arrayFormulas = new ArrayList<CellRangeAddress>();
         for (CTRow row : worksheet.getSheetData().getRowArray()) {
@@ -2956,17 +2961,32 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
         return new XSSFAutoFilter(this);
     }
     
+    /**
+     * Creates a new Table, and associates it with this Sheet
+     */
+    public Table createTable() {
+       if(! worksheet.isSetTableParts()) {
+          worksheet.addNewTableParts();
+       }
+       
+       CTTableParts tblParts = worksheet.getTableParts();
+       CTTablePart tbl = tblParts.addNewTablePart();
+       
+       Table table = (Table)createRelationship(XSSFRelation.TABLE, XSSFFactory.getInstance(), tblParts.sizeOfTablePartArray());
+       tbl.setId(table.getPackageRelationship().getId());
+       
+       tables.put(tbl.getId(), table);
+       
+       return table;
+    }
+    
     /**
      * Returns any tables associated with this Sheet
      */
     public List<Table> getTables() {
-       List<Table> tables = new ArrayList<Table>();
-       for(POIXMLDocumentPart p : getRelations()) {
-          if (p.getPackageRelationship().getRelationshipType().equals(XSSFRelation.TABLE.getRelation())) {
-             Table table = (Table) p;
-             tables.add(table);
-          }
-       }
-       return tables;
+       List<Table> tableList = new ArrayList<Table>(
+             tables.values()
+       );
+       return tableList;
     }
 }
index 9928949a27d5ced691771784ae932ed3865edf26..cf873f4d88174a309f26bc5d5d2734ac9e3ac37f 100644 (file)
@@ -892,6 +892,38 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
        assertEquals("Tabella1", t.getName());
        assertEquals("Tabella1", t.getDisplayName());
        assertEquals("A1:C3", t.getCTTable().getRef());
+
+       
+       // Add some more tables, and check
+       t = s2.createTable();
+       t.setName("New 2");
+       t.setDisplayName("New 2");
+       t = s3.createTable();
+       t.setName("New 3");
+       t.setDisplayName("New 3");
+       
+       wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
+       s1 = wb.getSheetAt(0);
+       s2 = wb.getSheetAt(1);
+       s3 = wb.getSheetAt(2);
+       s4 = wb.getSheetAt(3);
+       assertEquals(0, s1.getTables().size());
+       assertEquals(2, s2.getTables().size());
+       assertEquals(1, s3.getTables().size());
+       assertEquals(0, s4.getTables().size());
+       
+       t = s2.getTables().get(0);
+       assertEquals("Tabella1", t.getName());
+       assertEquals("Tabella1", t.getDisplayName());
+       assertEquals("A1:C3", t.getCTTable().getRef());
+       
+       t = s2.getTables().get(1);
+       assertEquals("New 2", t.getName());
+       assertEquals("New 2", t.getDisplayName());
+       
+       t = s3.getTables().get(0);
+       assertEquals("New 3", t.getName());
+       assertEquals("New 3", t.getDisplayName());
     }
     
     /**