diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 29d223a0e..718e7a3b6 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 52562 - Added methods to get/set a table row's Can't Split and Repeat Header attributes in XWPF 52561 - Added methods to set table inside borders and cell margins in XWPF 52569 - Support DConRefRecord in HSSF 52575 - added an option to ignore missing workbook references in formula evaluator diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java index a717d7f37..9da230238 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java @@ -22,13 +22,16 @@ import java.util.List; import org.apache.poi.util.Internal; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHeight; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTrPr; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff; /** * @author gisellabronzetti + * @author gregg morris - added removeCell(), setCantSplitRow(), setRepeatHeader() */ public class XWPFTableRow { @@ -64,6 +67,11 @@ public class XWPFTableRow { return null; } + public void removeCell(int pos) { + if (pos >= 0 && pos < ctRow.sizeOfTcArray()) { + tableCells.remove(pos); + } + } /** * adds a new TableCell at the end of this tableRow */ @@ -105,7 +113,6 @@ public class XWPFTableRow { return properties.sizeOfTrHeightArray() == 0 ? 0 : properties.getTrHeightArray(0).getVal().intValue(); } - private CTTrPr getTrPr() { return (ctRow.isSetTrPr()) ? ctRow.getTrPr() : ctRow.addNewTrPr(); } @@ -136,9 +143,67 @@ public class XWPFTableRow { */ public XWPFTableCell getTableCell(CTTc cell) { for(int i=0; i 0) { + CTOnOff onoff = trpr.getCantSplitList().get(0); + isCant = onoff.getVal().equals(STOnOff.ON); + } + return isCant; + } + + /** + * This attribute controls whether to repeat a table's header row at the top + * of a table split across pages. + * @param repeat - if TRUE, repeat header row at the top of each page of table; + * if FALSE, don't repeat header row. + */ + public void setRepeatHeader(boolean repeat) { + CTTrPr trpr = getTrPr(); + CTOnOff onoff = trpr.addNewTblHeader(); + onoff.setVal(repeat ? STOnOff.ON : STOnOff.OFF); + } + + /** + * Return true if a table's header row should be repeated at the top of a + * table split across pages. + * @return true if table's header row should be repeated at the top of each + * page of table, false otherwise. + */ + public boolean isRepeatHeader() { + boolean repeat = false; + CTTrPr trpr = getTrPr(); + if (trpr.sizeOfTblHeaderArray() > 0) { + CTOnOff rpt = trpr.getTblHeaderList().get(0); + repeat = rpt.getVal().equals(STOnOff.ON); + } + return repeat; + } + }// end class diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableRow.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableRow.java index c2b751ad2..abdf1688c 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableRow.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableRow.java @@ -20,27 +20,50 @@ package org.apache.poi.xwpf.usermodel; import junit.framework.TestCase; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; public class TestXWPFTableRow extends TestCase { - - @Override protected void setUp() throws Exception { - // TODO Auto-generated method stub super.setUp(); } - public void testSomething() throws Exception { - + public void testCreateRow() throws Exception { CTRow ctRow = CTRow.Factory.newInstance(); - + assertNotNull(ctRow); } @Override protected void tearDown() throws Exception { - // TODO Auto-generated method stub super.tearDown(); } + public void testSetGetCantSplitRow() { + // create a table + XWPFDocument doc = new XWPFDocument(); + CTTbl ctTable = CTTbl.Factory.newInstance(); + XWPFTable table = new XWPFTable(ctTable, doc); + // table has a single row by default; grab it + XWPFTableRow tr = table.getRow(0); + assertNotNull(tr); + + tr.setCantSplitRow(true); + boolean isCant = tr.isCantSplitRow(); + assert(isCant); + } + + public void testSetGetRepeatHeader() { + // create a table + XWPFDocument doc = new XWPFDocument(); + CTTbl ctTable = CTTbl.Factory.newInstance(); + XWPFTable table = new XWPFTable(ctTable, doc); + // table has a single row by default; grab it + XWPFTableRow tr = table.getRow(0); + assertNotNull(tr); + + tr.setRepeatHeader(true); + boolean isRpt = tr.isRepeatHeader(); + assert(isRpt); + } }