从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工作簿,并使用XSSFSheetXSSFRow类来创建工作表和行。然后,我们可以使用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());
                    }
                }