此篇教程将讲解如何添加表格到Word文本框及怎样获取、删除文本框中已有的表格。Free Spire.Doc for Java是此次代码演示所用到的控件。它是一款免费、专业的Java Word组件,开发人员使用它可以轻松地在Java应用程序中创建、编辑、读取、转换和打印Word文档。同时,作为一款完全独立的组件,其运行环境无需安装Microsoft Office。
测试环境在运行代码前,需将Free Spire.Doc for Java产品包中的Spire.Doc.jar导入IDEA。导入方式有两种:其一,在IDEA中创建一个Maven项目,然后在pom.xml文件里键入以下代码,最后点击“Import Changes”即可;
<repositories>
<repository>
<id>com.e-iceblue</id>
<url>http://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.doc.free</artifactId>
<version>3.9.0</version>
</dependency>
</dependencies>
其二,在E-iceblue中文官网上下载产品包,解压后将lib文件夹下的Spire.Doc.jar手动导入IDEA。
代码示例示例1 添加表格到Word文本框
在添加表格到文本框时,Free Spire.Doc for Java支持设置表格大小,位置及操作表格样式,如合并单元格、设置表格背景色、表格字体大小及颜色等。
import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.textbox;
import com.spire.doc.fields.TextRange;
import java.awt.*;
public class AddTable {
public static void main(String[] args) {
//创建文档
Document doc = new Document();
//添加指定大小的文本框
TextBox tb = doc.addSection().addParagraph().appendTextBox(380, 100);
//设置文本框的相对位置
tb.getFormat().setHorizontalOrigin(HorizontalOrigin.Left_Margin_Area);
tb.getFormat().setHorizontalPosition(120f);
tb.getFormat().setVerticalOrigin(VerticalOrigin.Page);
tb.getFormat().setVerticalPosition(50f);
//设置文本框边框样式
tb.getFormat().setLineStyle(TextBoxLineStyle.Thin_Thick);
tb.getFormat().setLineColor(Color.gray);
//声明数组内容
String[][] data = new String[][]{
new String[]{"Country List"},
new String[]{"Name", "Capital", "Continent", "Area"},
new String[]{"China", "Beijing", "East Asia", "9600000"},
new String[]{"Mexican", "Mexico City", "North America", "1964375"},
};
//添加表格
Table table = tb.getBody().addTable();
//指定表格行数、列数
table.resetCells(4,4);
//将数组内容填充到表格
for (int i = 0; i < data.length; i ) {
TableRow dataRow = table.getRows().get(i);
dataRow.getCells().get(i).setWidth(70);
dataRow.setHeight(22);
dataRow.setHeightType(TableRowHeightType.Exactly);
for (int j = 0; j < data[i].length; j ) {
dataRow.getCells().get(j).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
TextRange range2 = dataRow.getCells().get(j).addParagraph().appendText(data[i][j]);
range2.getCharacterFormat().setFontName("Calibri");
range2.getCharacterFormat().setFontSize(11f);
range2.getOwnerParagraph().getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
range2.getCharacterFormat().setBold(true);
}
}
//设置指定行的背景色
TableRow row = table.getRows().get(1);
for (int z = 0; z < row.getCells().getCount(); z ) {
row.getCells().get(z).getCellFormat().setBackColor(new Color(176,224,238));
}
//横向合并单元格
table.applyHorizontalMerge(0,0,3);
//应用表格样式
table.applyStyle(DefaultTableStyle.Table_Grid_5);
//保存文档
doc.saveToFile("output/AddTabletoTextbox.docx", FileFormat.Docx_2013);
}
}
添加效果:
示例2 获取文本框中的表格信息
import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.*;
import java.io.*;
public class ReadTable {
public static void main(String[] args) throws IOException {
//加载示例文档
Document doc = new Document();
doc.loadFromFile("C:\\Users\\Test1\\Desktop\\Test.docx");
//获取第一个文本框
TextBox textbox = doc.getTextBoxes().get(0);
//获取文本框中第一个表格
Table table = textbox.getBody().getTables().get(0);
//保存文本
String output = "output/readTableFromTextBox.txt";
File file = new File(output);
if (!file.exists()) {
file.delete();
}
file.createNewFile();
Filewriter fw = new FileWriter(file, true);
BufferedWriter bw = new BufferedWriter(fw);
//遍历表格中的段落并提取文本
for (int i = 0; i < table.getRows().getCount(); i ) {
TableRow row = table.getRows().get(i);
for (int j = 0; j < row.getCells().getCount(); j ) {
TableCell cell = row.getCells().get(j);
for (int k = 0; k < cell.getParagraphs().getCount(); k ) {
Paragraph paragraph = cell.getParagraphs().get(k);
bw.write(paragraph.getText() "\t");
}
}
bw.write("\r\n");
}
bw.flush();
bw.close();
fw.close();
}
}
效果图:
示例3 删除文本框中的表格
import com.spire.doc.*;
import com.spire.doc.fields.*;
public class DeleteTable {
public static void main(String[] args) {
//加载示例文档
Document doc = new Document();
doc.loadFromFile("C:\\Users\\Test1\\Desktop\\Test.docx");
//获取第一个文本框
TextBox textbox = doc.getTextBoxes().get(0);
//获取文本框中第一个表格
Table table = textbox.getBody().getTables().get(0);
//删除第一个表格
textbox.getBody().getTables().removeAt(0);
//保存文档
String output = "output/deleteTableFromTextBox.docx";
doc.saveToFile(output, FileFormat.Docx_2013);
}
}