gpt4 book ai didi

java - OutputStream 不会保存文件的所有更新

转载 作者:行者123 更新时间:2023-12-01 15:31:03 25 4
gpt4 key购买 nike

我正在处理 Microsoft word 2007 文档。

我的目标是实现:

  1. 表格单元格。
  2. 段落行。

所以,我的代码可以完成这项工作,但问题是当我使用 FileOutputStream 写入文件时,它只写入我的目标之一(仅最后一次修改)。

这是标题的图像:

enter image description here

这是我使用的代码:

    try{

InputStream input = new FileInputStream("c:\\doslot.docx");
XWPFDocument document=new XWPFDocument(input);
//*********************inserting the 2nd line**************************
XWPFHeader head = document.getHeaderList().get(0);
List<XWPFParagraph> para= head.getParagraphs();
XWPFRun pararun=para.get(0).createRun();
pararun.setText("DOSSIER DE LOT GLUSCAN® N°FG-4040400A");
//*********************inserting the header thrid table cell*************************
XWPFHeader headd = document.getHeaderList().get(1);
List<XWPFTable> tables = headd.getTables();
List<XWPFTableRow> rows = tables.get(0).getRows();
XWPFTableCell cell = rows.get(0).getTableCell(rows.get(0).getTableCells().get(3).getCTTc());
XWPFParagraph p =cell.addParagraph();
XWPFRun pararuno=p.createRun();
pararuno.setText("some text");


FileOutputStream out = new FileOutputStream("c:\\fin.docx");
document.write(out);
out.close();


}catch(Exception ex){
ex.printStackTrace();
}

最佳答案

问题是 List<XWPFTableCell> cell = rows.get(0).getTableCells();返回新创建的列表,XWPFTableRow.getTableCells()说:

create and return a list of all XWPFTableCell who belongs to this row

当然,注释确实会说谎,而代码不会,所以 sources说:

public List<XWPFTableCell> getTableCells(){
if(tableCells == null){
//Here it is created
List<XWPFTableCell> cells = new ArrayList<XWPFTableCell>();
for (CTTc tableCell : ctRow.getTcList()) {
cells.add(new XWPFTableCell(tableCell, this, table.getPart()));
}
this.tableCells = cells;
}
return tableCells;
}

为了帮助您,这里有一个 XWPFTableRow.getTableCell(CTTc cell) ,你经过的地方CTTc单元格,并且方法肯定返回一个现有对象:

public XWPFTableCell getTableCell(CTTc cell) {
for(int i=0; i<tableCells.size(); i++){
if(tableCells.get(i).getCTTc() == cell) return tableCells.get(i);
}
return null;
}

您可以通过调用 XWPFTableCell.getCTTc() 来实现 CTTc 单元。然后直接修改即可。

直接访问现有单元格的代码是:

XWPFTableCell cell = 
rows.getTableCell(rows.get(0).getTableCells().get(3).getCTTc());

我没有尝试或编译这段代码,所以我不确定它是否正确,但我相信我的面向对象知识和来源。无论如何,这应该可以做到。如果是这样 - 请更正代码以确保其正确且可编译。

FTR,我认为应该有更方便的方法来做到这一点,编辑单元格是很常见的,我认为它不应该那么复杂,我建议尝试一些关于 XWPFTable 及其操作的教程。

关于java - OutputStream 不会保存文件的所有更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9502679/

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