gpt4 book ai didi

java - 使用XWPFParagraph和XWPFRun,如何使打印的线条一致。请看说明

转载 作者:行者123 更新时间:2023-12-02 11:32:15 25 4
gpt4 key购买 nike

我正在使用 Apache POI 从 Java 生成 .docx 文件。我有一个表,其中包含诸如.. table without any entry我使用以下代码在第二行中写入内容。

String itemNames[] = {“Item 1”, “Item Name 2”, "Item 3"};
for(int i=0; i<3; i++) {
//getRow(1) represents second row of the table
//printing sr. no
paragraph = table.getRow(1).getCell(0).addParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
run = paragraph.createRun();
run.setText(i+1);

//printing item names
paragraph = table.getRow(1).getCell(1).addParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
run = paragraph.createRun();
run.setText(itemNames[i]);

//printing qty
paragraph = table.getRow(1).getCell(2).addParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
run = paragraph.createRun();
run.setText(1 + (i*10));
}

这会生成如下所示的输出。 Error picture在此,如您所见,第 2 行的项目名称无法写在 1 行中,因为单元格宽度小于内容。因此,有自动换行设置,以便该行在两行内完成书写。但是,其余内容仅占 1 行。

因此,当代码打印第三个条目时,它会在 sr no、项目名称和数量中创建一个新段落并写入值。但是,正如您在图像中看到的那样,输出并不是应有的样子。

我尝试获取段落中和运行中的行数,但无法获取实际数字,并且由于项目名称较大,我想向其他列添加中断以将其保存为正确的形式。但是如何找到第 2 行中单元格 2 的每次运行的行号?

最佳答案

我要做的是将表第 2 行的内容写入已经存在的行,然后对于每个其他内容行,使用 XWPFTable.createRow 创建一个新的 XWPFTableRow .

示例:

WordTableExample.docx 中的第一个表:

enter image description here

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.xwpf.usermodel.*;

public class WordInsertTableRows {

public static void main(String[] args) throws Exception {

XWPFDocument doc = new XWPFDocument(new FileInputStream("WordTableExample.docx"));
XWPFTable table = doc.getTableArray(0);
XWPFTableRow row;
XWPFParagraph paragraph;
XWPFRun run;

String itemNames[] = {"Item 1", "Item Name 2", "Item 3"};

for(int i=0; i<itemNames.length; i++) {
row = table.getRow(1+i); //getRow(1) represents second row of the table
if (row == null) row = table.createRow(); //if there is not a row already, then create one
//printing sr. no
paragraph = row.getCell(0).getParagraphArray(0);
if (paragraph == null) paragraph = row.getCell(0).addParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
//paragraph.setVerticalAlignment(TextAlignment.CENTER); //this sets valign for the paragraph
row.getCell(0).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //I suspect you wants set valign for the cell
run = paragraph.createRun();
run.setText(""+(i+1));

//printing item names
paragraph = row.getCell(1).getParagraphArray(0);
if (paragraph == null) paragraph = row.getCell(1).addParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
//paragraph.setVerticalAlignment(TextAlignment.CENTER);
row.getCell(1).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
run = paragraph.createRun();
run.setText(itemNames[i]);

//printing qty
paragraph = row.getCell(2).getParagraphArray(0);
if (paragraph == null) paragraph = row.getCell(2).addParagraph();
//paragraph.setVerticalAlignment(TextAlignment.CENTER);
row.getCell(2).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
run = paragraph.createRun();
run.setText(""+(1 + (i*10)));
}

doc.write(new FileOutputStream("WordTableExampleNew.docx"));

doc.close();
}
}

关于java - 使用XWPFParagraph和XWPFRun,如何使打印的线条一致。请看说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49208774/

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