从Java中读取Word表格并写入Excel
在日常工作中,我们经常会遇到需要将Word文档中的表格数据提取出来并保存到Excel中的任务。本文将介绍如何使用Java编程语言来实现这一功能。具体而言,我们将使用Apache POI库来读取Word文档,然后使用Apache POI和Apache POI-OOXML库来将数据写入Excel。
准备工作
在开始之前,请确保您已经安装了Java开发环境,并且已经下载了Apache POI和Apache POI-OOXML库的jar文件。您可以在Apache POI的官方网站上找到这些库的下载链接。
读取Word表格
首先,我们需要创建一个Word表格读取器的Java类。我们可以使用Apache POI库中的XWPFDocument
类来加载Word文档,并使用XWPFTable
类来访问表格。
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import java.io.FileInputStream;
import java.io.IOException;
public class WordTableReader {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("document.docx");
XWPFDocument doc = new XWPFDocument(fis);
for (XWPFTable table : doc.getTables()) {
// 处理表格数据
}
doc.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代码中,我们首先创建了一个FileInputStream
对象来加载Word文档。然后,我们使用XWPFDocument
类将文件输入流转换为XWPFDocument
对象。接下来,我们遍历文档中的所有表格,并使用XWPFTable
类来处理表格数据。
将数据写入Excel
接下来,我们需要创建一个Excel写入器的Java类。我们可以使用Apache POI库中的XSSFWorkbook
类来创建一个新的Excel工作簿,并使用XSSFSheet
和XSSFRow
类来创建工作表和行。然后,我们可以使用XSSFCell
类来创建单元格并将数据写入其中。
import org.apache.poi.xssf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelWriter {
public static void main(String[] args) {
try {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet1");
// 写入表头
XSSFRow headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("列1");
headerRow.createCell(1).setCellValue("列2");
// ...
// 写入数据
XSSFRow dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("数据1");
dataRow.createCell(1).setCellValue("数据2");
// ...
FileOutputStream fos = new FileOutputStream("output.xlsx");
workbook.write(fos);
workbook.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代码中,我们首先创建了一个XSSFWorkbook
对象来表示一个新的Excel工作簿。然后,我们使用createSheet
方法创建了一个新的工作表。接下来,我们创建了表头行和数据行,并使用setCellValue
方法将数据写入单元格中。最后,我们使用FileOutputStream
对象将工作簿写入到磁盘上的Excel文件中。
完整示例
现在,我们将上述的Word表格读取器和Excel写入器组合在一起,创建一个完整的示例。
import org.apache.poi.xssf.usermodel.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class WordTableToExcel {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("document.docx");
XWPFDocument doc = new XWPFDocument(fis);
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet1");
int rowIndex = 0;
for (XWPFTable table : doc.getTables()) {
for (int i = 0; i < table.getRows().size(); i++) {
XSSFRow row = sheet.createRow(rowIndex++);
for (int j = 0; j < table.getRow(i).getTableCells().size(); j++) {
XSSFCell cell = row.createCell(j);
cell.setCellValue(table.getRow(i).getCell(j).getText());
}
}