CTSimpleField sumAbove = paragraphInCell.getCTP().addNewFldSimple();
sumAbove.setInstr("=SUM(ABOVE)");
//set sum field dirty, so it must be calculated while opening the document
sumAbove.setDirty(STOnOff.TRUE);
Document.UpdateFields
如果您不想将字段设置为脏,那么您需要计算自己的总和。以下是计算xwpftable
特殊列的表单元格值之和的方法的工作草稿:
Double calculateSum(XWPFTable table, int col) {
Double result = null;
for (XWPFTableRow row : table.getRows()) {
if (row.getTableCells().size() > col) {
XWPFTableCell cell = row.getCell(col);
String cellContent = cell.getText();
try {
Number cellValue = java.text.NumberFormat.getInstance().parse(cellContent);
if (result == null) result = 0d;
result += cellValue.doubleValue();
} catch(Exception ex) {
//could not parse text to number
//ex.printStackTrace();
}
}
}
return result;
}
如果您有总和,那么CTSimpleField
需要获得一个文本运行,该文本运行将总和设置为文本值。然后,这与word
设置字段的缓存值相同。
完整示例:
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSimpleField;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
public class CreateWordTableSumAbove {
static Double calculateSum(XWPFTable table, int col) {
Double result = null;
for (XWPFTableRow row : table.getRows()) {
if (row.getTableCells().size() > col) {
XWPFTableCell cell = row.getCell(col);
String cellContent = cell.getText();
try {
Number cellValue = java.text.NumberFormat.getInstance().parse(cellContent);
if (result == null) result = 0d;
result += cellValue.doubleValue();
} catch(Exception ex) {
//could not parse text to number
//ex.printStackTrace();
}
}
}
return result;
}
static void setText(XWPFTableCell cell, String text) {
XWPFParagraph par = null;
if (cell.getParagraphs().size() == 0) par = cell.addParagraph();
else par = cell.getParagraphs().get(0);
par.createRun().setText(text);
}
public static void main(String[] args) throws Exception {
XWPFDocument document= new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run=paragraph.createRun();
run.setText("The table:");
//create the table
XWPFTable table = document.createTable(4,3);
table.setWidth("100%");
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
if (col < 2) {
setText(table.getRow(row).getCell(col), "row " + row + ", col " + col);
} else {
setText(table.getRow(row).getCell(col), "" + ((row + 1) * 1234));
}
}
}
//set Sum row
setText(table.getRow(3).getCell(0), "Sum:");
//get paragraph from cell where the sum field shall be contained
XWPFParagraph paragraphInCell = null;
if (table.getRow(3).getCell(2).getParagraphs().size() == 0) paragraphInCell = table.getRow(3).getCell(2).addParagraph();
else paragraphInCell = table.getRow(3).getCell(2).getParagraphs().get(0);
//set sum field in
CTSimpleField sumAbove = paragraphInCell.getCTP().addNewFldSimple();
sumAbove.setInstr("=SUM(ABOVE)");
Double sum = calculateSum(table, 2);
System.out.println(sum);
if (sum != null) {
//if there is a sum, set that sum to be the cached result of the field
sumAbove.addNewR().addNewT().setStringValue(new java.text.DecimalFormat("#.#").format(sum));
} else {
//set sum field dirty, so it must be calculated while opening the document
sumAbove.setDirty(STOnOff.TRUE);
}
paragraph = document.createParagraph();
FileOutputStream out = new FileOutputStream("create_table.docx");
document.write(out);
out.close();
document.close();
}
}
我无法使用ApachePOI删除docx文件中的所有注释。有没有其他方法可以使用docx4j api删除注释?
我有点迷失了 我试过3.17、4.0.0和5.0.0版。 或 我无法获得没有弃用或类型错误的代码:-( 我将Eclipe与Maven和Java11一起使用。在版本发布之后,我做了“更新项目”来更新Maven。
我正在尝试在我的项目中使用docx4j。(我在这方面还是个新手。) 我只是尝试从这个链接运行示例代码。 http://www.smartjava.org/content/create-complex-word-docx-documents-programatically-docx4j 输入是。docx文件,输出也是一个. docx文件。 这是控制台在尝试读取我的模板文件时给我的信息: 此处的环境列
我试图通过使用iloc或loc以及下面引用的数据集来更新表1(一级、二级和三级)。如果有建议,我愿意选择一种比loc和iloc更好的方法。 表1 例1 如果我希望表格更新为第13级和第三级工资等级的1102选择的新信息,我将使用以下pd.loc代码: 例2:这个也管用。 然而,挑战是当我需要选择多个索引或多列时。 多行 现在,如果我想更新表1,所有级别I的总计,而不是执行某种类型的df.isin,
本文向大家介绍如何在MongoDB中汇总总和以获得总数?,包括了如何在MongoDB中汇总总和以获得总数?的使用技巧和注意事项,需要的朋友参考一下 要在MongoDB中汇总总和以获取总计数,可以使用$sum运算符。要了解上述概念,让我们使用文档创建一个集合- 在method的帮助下显示集合中的所有文档。查询如下- 以下是输出- 这是获取总数的查询。 情况1-查询如下- 以下是输出- 这是在Mong
Docx4J生成的Excel工作簿总是说损坏了,但我无法确定Excel不喜欢底层XML的什么,更不用说如何修复它了。 我的用例如下:我试图定期自动生成一个带有图表和图形的excel工作簿。只有原始数据会改变,但随着原始数据的改变,其他一切都会动态更新。 null null 在我的空白工作簿之前和之后 欢迎所有的想法。