gpt4 book ai didi

java - 如何使用 Docx4J 向现有表添加行

转载 作者:行者123 更新时间:2023-12-01 17:27:02 25 4
gpt4 key购买 nike

我有一个现有的工作簿,其中包含一个包含表格的工作表(“表格”是指 Excel UI 的“插入表格”功能,其中包含列标题和筛选器箭头等)。我无法确定使用哪些类来编辑表的现有行或将新行插入表中。

我已经成功地将新的单元格内容写入现有单元格以及创建全新的单元格/行(这在很大程度上要归功于 JasonPlutext )。我不想先编写标题行和所有数据行,然后使用 API 将其放入表格中,但我想知道是否有人知道应该如何完成。过去,我可以只创建包含我知道需要的行数的表,但在这种情况下,行数是动态的。我希望我可以只引用一个 tablePart,然后会有一些方法可以插入到 List 对象中。

感谢任何指导。

编辑:

作为一个具体示例,假设我有一个工作簿和工作表,其中包含一个从 A1 开始的 2 列 2 行(包括标题)的现有表格。我可以打开底层 xl>tables>table1.xml 并看到以下内容:


<table xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="xr xr3" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" id="5" xr:uid="{FAABA541-34FC-423B-94F5-DDD8D784132E}" name="SummarySFTP" displayName="SummarySFTP" ref="A1:B2" totalsRowShown="0" headerRowDxfId="46" headerRowBorderDxfId="45" tableBorderDxfId="44">
<autoFilter ref="A1:B2" xr:uid="{93499C15-75FB-4436-A9B9-0C1FCBD787F4}">
<filterColumn colId="0" hiddenButton="0"/>
<filterColumn colId="1" hiddenButton="0"/>
</autoFilter>
<tableColumns count="2">
<tableColumn id="1" xr3:uid="{D4DA50CD-C581-4286-9B64-42B02B6646B6}" name="Status"/>
<tableColumn id="2" xr3:uid="{9D4F40B3-B530-42E1-92E9-86D5632CA191}" name="Quantity" dataDxfId="43"/>
</tableColumns>
<tableStyleInfo showFirstColumn="0" showLastColumn="0" showRowStripes="1" showColumnStripes="0"/>
</table>

我可以看到我的两列,以及根标记的 ref 属性以及 autoFilter block 的 ref 属性。我想要做的是添加一个新行,使表格区域为 A1:B3。

最佳答案

检查 docx4j Web 应用程序中包含表格的 xlsx 文件,看起来相当简单。

它为表格部分的内容生成代码,例如:

CTTable table = smlObjectFactory.createCTTable(); 
JAXBElement<org.xlsx4j.sml.CTTable> tableWrapped = smlObjectFactory.createTable(table);
// Create object for autoFilter
CTAutoFilter autofilter = smlObjectFactory.createCTAutoFilter();
table.setAutoFilter(autofilter);
autofilter.setRef( "A2:B4");
// Create object for tableColumns
CTTableColumns tablecolumns = smlObjectFactory.createCTTableColumns();
table.setTableColumns(tablecolumns);
tablecolumns.setCount( new Long(2) );
// Create object for tableColumn
CTTableColumn tablecolumn = smlObjectFactory.createCTTableColumn();
tablecolumns.getTableColumn().add( tablecolumn);
tablecolumn.setTotalsRowFunction(org.xlsx4j.sml.STTotalsRowFunction.NONE);
tablecolumn.setName( "Column1");
tablecolumn.setId( 1 );
// Create object for tableColumn
CTTableColumn tablecolumn2 = smlObjectFactory.createCTTableColumn();
tablecolumns.getTableColumn().add( tablecolumn2);
tablecolumn2.setTotalsRowFunction(org.xlsx4j.sml.STTotalsRowFunction.NONE);
tablecolumn2.setName( "Column2");
tablecolumn2.setId( 2 );
// Create object for tableStyleInfo
CTTableStyleInfo tablestyleinfo = smlObjectFactory.createCTTableStyleInfo();
table.setTableStyleInfo(tablestyleinfo);
tablestyleinfo.setName( "TableStyleMedium2");
table.setTableType(org.xlsx4j.sml.STTableType.WORKSHEET);
table.setHeaderRowCount( new Long(1) );
table.setTotalsRowCount( new Long(0) );
table.setName( "Table1");
table.setId( 1 );
table.setRef( "A2:B4");
table.setDisplayName( "Table1");

一旦知道行数,您就会发现需要将其写入两个位置,使用 setRef 和 autofilter.setRef

关于java - 如何使用 Docx4J 向现有表添加行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61197890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com