最简单的解析word(带表格,业务需要,只写了docx的)方式

 

/**
     * 读取Word 到数据库
     * @param file
     * @param request
     * @throws IOException
     * @throws ParseException
     */
    @Override
    public void importWord(MultipartFile file, HttpServletRequest request) throws IOException, ParseException {
        FileInputStream in = (FileInputStream) file.getInputStream();
        String regEx="[^0-9\\.]+";//自定义正则表达式:保留整数与小数(字符串取数字方法)
        Pattern pattern = Pattern.compile(regEx);
        XWPFDocument xwpf = new XWPFDocument(in);

        // 获取word中的所有段落与表格
        List<IBodyElement> elements = xwpf.getBodyElements();
        //用定义好的正则表达式拆分字符串,,把字符串中的数字留出来
        String dates[] = pattern.split(DocUtils.getParagraphText((XWPFParagraph));
        for (IBodyElement element : elements) {
            // 段落
            if (element instanceof XWPFParagraph) {
                String paragraphText = DocUtils.getParagraphText((XWPFParagraph) element);
            } else if (element instanceof XWPFTable) {
                // 表格
                Map<String, List<String>> tabelText = DocUtils.getTabelText((XWPFTable) element);
            }
        }
    }

依赖相关记不住了,pom里面前两个好像就够了,可参考下图:

文档截图:

工具类:

package com.essence.business.sxz.common.util;

import org.apache.poi.xwpf.usermodel.*;

import java.util.*;

public class DocUtils {


    /**
     * docx 格式获取表格内容
     *
     * @param table
     */
    public static Map<String, List<String>> getTabelText(XWPFTable table) {
        Map<String, List<String>> result = new LinkedHashMap<>();
        List<XWPFTableRow> rows = table.getRows();
        for (XWPFTableRow row : rows) {
            String key = null;
            List<String> list = new ArrayList<>(16);
            int i = 0;
            List<XWPFTableCell> cells = row.getTableCells();
            for (XWPFTableCell cell : cells) {
                // 简单获取内容(简单方式是不能获取字体对齐方式的)
                StringBuffer sb = new StringBuffer();
                // 一个单元格可以理解为一个word文档,单元格里也可以加段落与表格
                List<XWPFParagraph> paragraphs = cell.getParagraphs();
                for (XWPFParagraph paragraph : paragraphs) {
                    sb.append(DocUtils.getParagraphText(paragraph));
                }
                if (i == 0) {
                    key = sb.toString();
                } else {
                    String value = sb.toString();
                    list.add(value == null || Objects.deepEquals(value, "") ? null : value.replace(",", ""));
                }
                i++;
            }
            result.put(key, list);
        }
        return result;
    }

    /**
     * docx 获取段落字符串
     * 获取段落内容
     *
     * @param paragraph
     */
    public static String getParagraphText(XWPFParagraph paragraph) {
        StringBuffer runText = new StringBuffer();
        // 获取段落中所有内容
        List<XWPFRun> runs = paragraph.getRuns();
        if (runs.size() == 0) {
            return runText.toString();
        }
        for (XWPFRun run : runs) {
            runText.append(run.text());
        }
        return runText.toString();
    }
}

没写清楚的地方可以私信我

在Spring Boot中解析Word文件中的表格数据,你可以使用Apache POI库来实现。下面是一个简单的示例代码,展示了如何解析Word文件中的表格数据: ```java import org.apache.poi.xwpf.usermodel.*; import java.io.FileInputStream; import java.io.IOException; import java.util.Iterator; import java.util.List; public class WordTableParser { public static void main(String[] args) { try { FileInputStream fileInputStream = new FileInputStream("path/to/your/word/file.docx"); XWPFDocument document = new XWPFDocument(fileInputStream); // 获取所有表格 List<XWPFTable> tables = document.getTables(); for (XWPFTable table : tables) { // 获取表格的所有行 List<XWPFTableRow> rows = table.getRows(); for (XWPFTableRow row : rows) { // 获取行的所有单元格 List<XWPFTableCell> cells = row.getTableCells(); for (XWPFTableCell cell : cells) { // 提取单元格内容 String cellText = cell.getText(); System.out.println("Cell Text: " + cellText); } } } document.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们首先使用`FileInputStream`来读取Word文件。然后,我们创建一个`XWPFDocument`对象来表示文档。 接下来,我们使用`getTables()`方法获取文档中的所有表格。然后,我们循环遍历每个表格,使用`getRows()`方法获取表格的所有行。再次循环遍历每一行,使用`getTableCells()`方法获取行的所有单元格。最后,我们使用`getText()`方法提取每个单元格的文本内容。 请确保将示例代码中的`"path/to/your/word/file.docx"`替换为实际的Word文件路径。 这是一个简单的示例,你可以根据自己的需求进行更复杂的数据处理和解析。希望能帮助到你!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值