使用 XWPFParagraph 和 XWPFRun,如何使行打印在同一行上。请看说明
Using XWPFParagraph and XWPFRun, how to make the lines printing on the same. See the description please
我正在使用 Apache POI 从 Java 生成一个 .docx 文件。
我有一个 table 列,如..
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 行中,因为单元格宽度小于内容。因此,设置了自动换行,以便该行以 2 行完成写入。但是,其余内容只需要 1 行。
所以当代码打印第三个条目时,它会在 sr no、item name 和 qty 中创建一个新段落并写入值。但是,正如您在图像中看到的那样,输出并不像它应该的那样。
我也尝试获取段落和 运行 中的行数,但我无法获取实际数量,并且由于项目名称较大,我想在其他列中添加中断以将其保存在适当的形式。但是如何找到第 2 行中单元格 2 的每个 运行 的行号?
我要做的是将 table 的第 2 行的内容写入已经存在的行,然后为每个进一步的内容行,使用 XWPFTable.createRow 创建一个新的 XWPFTableRow
.
示例:
WordTableExample.docx
中的第一个 table:
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();
}
}
我正在使用 Apache POI 从 Java 生成一个 .docx 文件。 我有一个 table 列,如.. 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 行中,因为单元格宽度小于内容。因此,设置了自动换行,以便该行以 2 行完成写入。但是,其余内容只需要 1 行。
所以当代码打印第三个条目时,它会在 sr no、item name 和 qty 中创建一个新段落并写入值。但是,正如您在图像中看到的那样,输出并不像它应该的那样。
我也尝试获取段落和 运行 中的行数,但我无法获取实际数量,并且由于项目名称较大,我想在其他列中添加中断以将其保存在适当的形式。但是如何找到第 2 行中单元格 2 的每个 运行 的行号?
我要做的是将 table 的第 2 行的内容写入已经存在的行,然后为每个进一步的内容行,使用 XWPFTable.createRow 创建一个新的 XWPFTableRow
.
示例:
WordTableExample.docx
中的第一个 table:
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();
}
}