poi读word内的表格内容案例

本文介绍如何使用Apache POI库从Word文档中读取表格数据,包括代码示例和Maven依赖配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

poi读word内的表格内容案例

代码如下:

import org.apache.poi.xwpf.usermodel.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * <p>Title:ImportWordTest.java</p>
 * <p>Description: 利用easypoi读取word的段落和表格内容</p>
 * <p>Copyright: Copyright(c)2020</p>
 * <p>Date:2020/2/18 10:07</p>
 * @author xxx
 * @version 1.0
 */
public class ReadWordTest {
    public static void main(String[] args) {
        String path = "D:\\模板.docx";
        List<List<String>> lists = readWord(path);
        for (int i = 0; i < lists.size(); i++) {
            System.out.println("=====================" + i + "=====================");
            List<String> stringList = lists.get(i);
            for (String s : stringList) {
                System.out.println(s);
            }
        }
    }

    /**
     * 读word的表格
     * @param path
     * @return
     */
    public static List<List<String>> readWord(String path){
        List<List<String>> list = new ArrayList<>();
        try {
            File file = new File(path);
            InputStream is = new FileInputStream(file);
            XWPFDocument docx = new XWPFDocument(is);
            List<XWPFParagraph> paragraphs = docx.getParagraphs();
            //获取备注
            ReadWordTest.getNotes(paragraphs);
            List<XWPFTable> tables = docx.getTables();
            //遍历word内的表格
            for (int i = 0; i < tables.size(); i++) {
                XWPFTable table = tables.get(i);
                //读取每一行数据
                for (int j = 0; j < table.getNumberOfRows(); j++) {
                    if (j >= 2) {
                        List<String> stringList = new ArrayList<>();
                        //读取表格的某一行的所有数据
                        XWPFTableRow row = table.getRow(j);
                        //读取每一列的数据
                        List<XWPFTableCell> cells = row.getTableCells();
                        String text = "";
                        for (int k = 0; k < cells.size(); k++) {
                            XWPFTableCell cell = cells.get(k);
                            List<XWPFParagraph> paragraphs1 = cell.getParagraphs();
                            text = "";
                            if(paragraphs1.size() <= 1) {
                                //一格一条数据
                                text = cell.getText();
                            }else if (paragraphs1.size() > 1){
                                //一格多条数据
                                //表格内含有多个人的时候处理
                                text = "";
                                for (int h = 0; h < paragraphs1.size(); h++) {
                                    XWPFParagraph xwpfParagraph = paragraphs1.get(h);
                                    List<XWPFRun> runs = xwpfParagraph.getRuns();
                                    if (h > 0){
                                        text += ",";
                                    }
                                    if (runs.size() > 1){
                                        for (int b = 0; b < runs.size(); b++) {
                                            XWPFRun xwpfRun = runs.get(b);
                                            text += xwpfRun.getText(0);
                                        }
                                    }else {
                                        for (XWPFRun run : runs) {
                                            text += run.getText(0);
                                        }
                                    }
                                }
                            }
                            stringList.add(text);
                        }
                        list.add(stringList);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    /**
     * 获取文档中备注(读取Word段落的内容)
     * @param paragraphs
     * @return
     */
    public static String getNotes(List<XWPFParagraph> paragraphs){
        XWPFParagraph para = paragraphs.get(3);
        String notes = "";
        List<XWPFRun> runList = para.getRuns();
        if (runList.size() > 0) {
            for (XWPFRun r : runList) {
                notes += r.getText(0);
            }
            System.out.println("备注*:" + notes);
        }else {
            System.out.println("备注*:" + notes);
        }
        return notes;
    }
}

maven依赖如下:

小编这里用的是easypoi,easypoi是对poi的再次封装。

	<dependencies>
		<!-- easypoi -->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>4.1.0</version>
        </dependency>
    </dependencies>

读取模板的内容如图:
在这里插入图片描述
大概就是这个样子。
读取的后的内容我们打印一下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值