[英]How to increase width of column of table in word file by JAVA
I working on a small project where I am creating word file by Java and enter some detail in this word file. 我正在开发一个小项目,我正在用Java创建word文件,并在这个word文件中输入一些细节。 I am able to create word file and also able to enter data into it.
我能够创建word文件,并能够输入数据。 I also write a table into word file and enter some details.
我还将一个表写入word文件并输入一些细节。
Now what I want, I want to increase width of specific column. 现在我想要的,我想增加特定列的宽度。
Is there any way to do this? 有没有办法做到这一点? I am using Apache POI drivers for creating word file and writing data into it.
我正在使用Apache POI驱动程序来创建word文件并将数据写入其中。
I am using below code: 我使用下面的代码:
XWPFDocument document= new XWPFDocument();
try{
FileOutputStream out = new FileOutputStream(
new File("d:\\createparagraph.docx"));
XWPFParagraph paragraph = document.createParagraph();
XWPFTable table = document.createTable();
XWPFTableRow tableRowOne = table.getRow(0);
tableRowOne.getCell(0).setText("CLientID");
tableRowOne.addNewTableCell().setText(txtCID.getText());
//create second row
XWPFTableRow tableRow2 = table.createRow();
tableRow2.getCell(0).setText("AccountID");
tableRow2.getCell(1).setText(txtAID.getText());
document.write(out);
out.close();
}
This code working fine and generate normal table but I want to increase width of specific column (Column 2). 此代码工作正常并生成普通表但我想增加特定列的宽度(第2列)。
Please help. 请帮忙。
As far as I see, the column width settings are not implemented (as of POI version 3.15 final) in XWPFTable
. 据我
XWPFTable
, XWPFTable
中没有实现列宽设置(截至POI版本3.15 final)。 So we must use the underlying low level objects. 所以我们必须使用底层的低级对象。
Example: 例:
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import java.math.BigInteger;
public class CreateWordTableColumnWidth {
public static void main(String[] args) throws Exception {
XWPFDocument document= new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run=paragraph.createRun();
run.setText("The Body:");
paragraph = document.createParagraph();
XWPFTable table = document.createTable(1, 2);
//values are in unit twentieths of a point (1/1440 of an inch)
table.setWidth(5*1440); //should be 5 inches width
//create CTTblGrid for this table with widths of the 2 columns.
//necessary for Libreoffice/Openoffice to accept the column widths.
//first column = 2 inches width
table.getCTTbl().addNewTblGrid().addNewGridCol().setW(BigInteger.valueOf(2*1440));
//other columns (only one in this case) = 3 inches width
for (int col = 1 ; col < 2; col++) {
table.getCTTbl().getTblGrid().addNewGridCol().setW(BigInteger.valueOf(3*1440));
}
//set width for first column = 2 inches
CTTblWidth tblWidth = table.getRow(0).getCell(0).getCTTc().addNewTcPr().addNewTcW();
tblWidth.setW(BigInteger.valueOf(2*1440));
//STTblWidth.DXA is used to specify width in twentieths of a point.
tblWidth.setType(STTblWidth.DXA);
//set width for second column = 3 inches
tblWidth = table.getRow(0).getCell(1).getCTTc().addNewTcPr().addNewTcW();
tblWidth.setW(BigInteger.valueOf(3*1440));
tblWidth.setType(STTblWidth.DXA);
XWPFTableRow tableRowOne = table.getRow(0);
tableRowOne.getCell(0).setText("CLientID");
tableRowOne.getCell(1).setText("CID001");
//create second row
XWPFTableRow tableRow2 = table.createRow();
tableRow2.getCell(0).setText("AccountID");
tableRow2.getCell(1).setText("ACCID001");
paragraph = document.createParagraph();
document.write(new FileOutputStream("CreateWordTableColumnWidth.docx"));
document.close();
}
}
The code is commented to describe what it does. 该代码被评论以描述它的作用。 Especially mentioned should be the special measurement unit Twip (twentieth of a point).
特别提到应该是Twip的特殊测量单位(二十分之一)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.