You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ab...@apache.org on 2020/03/31 00:47:45 UTC

svn commit: r1875901 - in /poi/trunk/src/ooxml: java/org/apache/poi/xslf/usermodel/XSLFTable.java java/org/apache/poi/xslf/usermodel/XSLFTableRow.java testcases/org/apache/poi/xslf/usermodel/TestXSLFTable.java

Author: abearez
Date: Tue Mar 31 00:47:45 2020
New Revision: 1875901

URL: http://svn.apache.org/viewvc?rev=1875901&view=rev
Log:
Insert a new row in XSLFTable

Modified:
    poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java
    poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableRow.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTable.java

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java?rev=1875901&r1=1875900&r2=1875901&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java Tue Mar 31 00:47:45 2020
@@ -153,19 +153,41 @@ public class XSLFTable extends XSLFGraph
 
     public XSLFTableRow addRow(){
         CTTableRow tr = _table.addNewTr();
+        return initializeRow(tr);
+    }
+
+    private XSLFTableRow initializeRow(CTTableRow tr) {
         XSLFTableRow row = new XSLFTableRow(tr, this);
         // default height is 20 points
         row.setHeight(20.0);
         _rows.add(row);
-        updateRowColIndexes();
+        for (int i = 0;  i < getNumberOfColumns(); i++) {
+            row.addCell();
+        }
         return row;
     }
 
     /**
+     * Insert a new row at the given index.
+     * @param rowIdx the row index.
+     * @since POI 4.1.3
+     */
+    public XSLFTableRow insertRow(int rowIdx) {
+        if (getNumberOfRows() < rowIdx) {
+            throw new IndexOutOfBoundsException("Cannot insert row at " + rowIdx + "; table has only " + getNumberOfRows() + "rows.");
+        }
+        CTTableRow tr = _table.insertNewTr(rowIdx);
+        return initializeRow(tr);
+    }
+
+    /**
      * Remove the row on the given index
      * @param rowIdx the row index
      */
     public void removeRow(int rowIdx) {
+        if (getNumberOfRows() < rowIdx) {
+            throw new IndexOutOfBoundsException("Cannot remove row at " + rowIdx + "; table has only " + getNumberOfRows() + "rows.");
+        }
         _table.removeTr(rowIdx);
         _rows.remove(rowIdx);
         updateRowColIndexes();
@@ -176,14 +198,13 @@ public class XSLFTable extends XSLFGraph
      * @since POI 4.1.2
      */
     public void addColumn() {
-        long width = _table.getTblGrid().getGridColArray(_table.getTblGrid().sizeOfGridColArray() - 1).getW();
+        long width = _table.getTblGrid().getGridColArray(getNumberOfColumns() - 1).getW();
         CTTableCol col = _table.getTblGrid().addNewGridCol();
         col.setW(width);
-        for(XSLFTableRow row : _rows) {
+        for (XSLFTableRow row : _rows) {
             XSLFTableCell cell = row.addCell();
             new XDDFTextBody(cell, cell.getTextBody(true)).initialize();
         }
-        updateRowColIndexes();
     }
 
     /**
@@ -192,17 +213,16 @@ public class XSLFTable extends XSLFGraph
      * @since POI 4.1.2
      */
     public void insertColumn(int colIdx) {
-        if (_table.getTblGrid().sizeOfGridColArray() < colIdx) {
-            throw new IndexOutOfBoundsException("Cannot insert column at " + colIdx + "; table has only " + _table.getTblGrid().sizeOfGridColArray() + "columns.");
+        if (getNumberOfColumns() < colIdx) {
+            throw new IndexOutOfBoundsException("Cannot insert column at " + colIdx + "; table has only " + getNumberOfColumns() + "columns.");
         }
         long width = _table.getTblGrid().getGridColArray(colIdx).getW();
         CTTableCol col = _table.getTblGrid().insertNewGridCol(colIdx);
         col.setW(width);
-        for(XSLFTableRow row : _rows) {
+        for (XSLFTableRow row : _rows) {
             XSLFTableCell cell = row.insertCell(colIdx);
             new XDDFTextBody(cell, cell.getTextBody(true)).initialize();
         }
-        updateRowColIndexes();
     }
 
     /**
@@ -211,11 +231,13 @@ public class XSLFTable extends XSLFGraph
      * @since POI 4.1.2
      */
     public void removeColumn(int colIdx) {
+        if (getNumberOfColumns() < colIdx) {
+            throw new IndexOutOfBoundsException("Cannot remove column at " + colIdx + "; table has only " + getNumberOfColumns() + "columns.");
+        }
         _table.getTblGrid().removeGridCol(colIdx);
-        for(XSLFTableRow row : _rows) {
+        for (XSLFTableRow row : _rows) {
             row.removeCell(colIdx);
         }
-        updateRowColIndexes();
     }
 
     static CTGraphicalObjectFrame prototype(int shapeId){

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableRow.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableRow.java?rev=1875901&r1=1875900&r2=1875901&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableRow.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableRow.java Tue Mar 31 00:47:45 2020
@@ -105,6 +105,9 @@ public class XSLFTableRow implements Ite
      * @since POI 4.1.2
      */
     public void removeCell(int colIdx){
+        if (_row.sizeOfTcArray() < colIdx) {
+            throw new IndexOutOfBoundsException("Cannot remove cell at " + colIdx + "; row has only " + _row.sizeOfTcArray() + "columns.");
+        }
         _row.removeTc(colIdx);
         _cells.remove(colIdx);
         _table.updateRowColIndexes();

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTable.java?rev=1875901&r1=1875900&r2=1875901&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTable.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTable.java Tue Mar 31 00:47:45 2020
@@ -55,61 +55,67 @@ public class TestXSLFTable {
 
         XMLSlideShow ppt = new XMLSlideShow();
         int rowIdx=1;
+
+        XSLFSlide slide = ppt.createSlide();
+        // a red bordered box in the background, to show/verify the table dimensions
+        XSLFAutoShape as = slide.createAutoShape();
+        as.setShapeType(ShapeType.RECT);
+        as.setStrokeStyle(Color.RED, 2., StrokeStyle.LineDash.LG_DASH);
+
+        XSLFTable tab = slide.createTable(1, data[0].length);
+        tab.setAnchor(new Rectangle2D.Double(50,50,0,0));
+        tab.setColumnWidth(0, 60);
+        tab.setColumnWidth(1, 60);
+        tab.setColumnWidth(2, 60);
+
+        tab.insertColumn(0);
+        assertEquals(tab.getColumnWidth(1), tab.getColumnWidth(0), 0.00001);
+        assertNotNull(tab.getCell(0, 0).getTextBody());
+        tab.addColumn();
+        XSLFTableCell cell = tab.getCell(0, data[0].length + 1);
+        assertEquals(1, cell.getTextBody().getParagraphs().size());
+        assertEquals("", cell.getTextBody().getParagraph(0).getText());
+        assertEquals(tab.getColumnWidth(tab.getNumberOfColumns() - 2), tab.getColumnWidth(tab.getNumberOfColumns() - 1), 0.00001);
+        assertNotNull(tab.getCell(0, tab.getNumberOfColumns() - 1).getTextBody());
+        tab.removeColumn(0);
+        tab.removeColumn(tab.getNumberOfColumns() - 1);
+        assertEquals(data[0].length, tab.getNumberOfColumns());
+
+        int startRow = rowIdx-1;
+
+        XSLFTableRow row = tab.getRows().get(0);
+        for (int colIdx=0; colIdx<data[0].length; colIdx++) {
+            XSLFTextRun tr = row.getCells().get(colIdx).setText(data[0][colIdx]);
+            tr.setFontSize(20.);
+            tr.setFontFamily("Arial");
+        }
+
         while (rowIdx<data.length) {
-            XSLFSlide slide = ppt.createSlide();
-            // a red bordered box in the background, to show/verify the table dimensions
-            XSLFAutoShape as = slide.createAutoShape();
-            as.setShapeType(ShapeType.RECT);
-            as.setStrokeStyle(Color.RED, 2., StrokeStyle.LineDash.LG_DASH);
-
-            XSLFTable tab = slide.createTable(1, data[0].length);
-            tab.setAnchor(new Rectangle2D.Double(50,50,0,0));
-            tab.setColumnWidth(0, 60);
-            tab.setColumnWidth(1, 60);
-            tab.setColumnWidth(2, 60);
-
-            tab.insertColumn(0);
-            assertEquals(tab.getColumnWidth(1), tab.getColumnWidth(0), 0.00001);
-            assertNotNull(tab.getCell(0, 0).getTextBody());
-            tab.addColumn();
-            XSLFTableCell cell = tab.getCell(0, data[0].length + 1);
-            assertEquals(1, cell.getTextBody().getParagraphs().size());
-            assertEquals("", cell.getTextBody().getParagraph(0).getText());
-            assertEquals(tab.getColumnWidth(tab.getNumberOfColumns() - 2), tab.getColumnWidth(tab.getNumberOfColumns() - 1), 0.00001);
-            assertNotNull(tab.getCell(0, tab.getNumberOfColumns() - 1).getTextBody());
-            tab.removeColumn(0);
-            tab.removeColumn(tab.getNumberOfColumns() - 1);
-            assertEquals(data[0].length, tab.getNumberOfColumns());
-
-            int startRow = rowIdx-1;
-
-            XSLFTableRow row = tab.getRows().get(0);
-            for (int colIdx=0; colIdx<data[0].length; colIdx++) {
-                XSLFTextRun tr = row.getCells().get(colIdx).setText(data[0][colIdx]);
-                tr.setFontSize(20.);
+            row = tab.addRow();
+            for (int col=0; col<data[rowIdx].length; col++) {
+                XSLFTextRun tr = tab.getCell(rowIdx, col).setText(data[rowIdx][col]);
+                tr.setFontSize(15.);
                 tr.setFontFamily("Arial");
             }
-
-
-            while (rowIdx<data.length) {
-                row = tab.addRow();
-                for (int col=0; col<data[rowIdx].length; col++) {
-                    XSLFTextRun tr = row.addCell().setText(data[rowIdx][col]);
-                    tr.setFontSize(15.);
-                    tr.setFontFamily("Arial");
-                }
-                tab.updateCellAnchor();
-                if (tab.getAnchor().getHeight() > maxHeight) {
-                    tab.removeRow(rowIdx-startRow);
-                    break;
-                }
-                rowIdx++;
+            row = tab.insertRow(rowIdx);
+            for (int col=0; col<data[rowIdx].length; col++) {
+                XSLFTextRun tr = tab
+                        .getCell(rowIdx, col)
+                        .setText(
+                                data[rowIdx][col]);
+                tr.setFontSize(12.);
+                tr.setFontFamily("Arial");
             }
-
             tab.updateCellAnchor();
-            as.setAnchor(tab.getAnchor());
+            if (tab.getAnchor().getHeight() > maxHeight) {
+                tab.removeRow(rowIdx-startRow);
+                break;
+            }
+            rowIdx += 2;
         }
 
+        as.setAnchor(tab.getAnchor());
+
         File fileOut = TempFile.createTempFile("tabtest", ".pptx");
         try (FileOutputStream fos = new FileOutputStream(fileOut)) {
             ppt.write(fos);



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org