记录上传word读取内容后端实现

记录上传word读取内容后端实现
controller

 @PostMapping(value = "/upload")
    @ResponseBody
    public List<List<String>> WordRead(@RequestParam(value = "file") MultipartFile file) {
        System.out.println("controller");
        return wordService.readContent(file);
    }

service

@Override

public List<List<String>> readContent(MultipartFile file) {

    try {
        FileInputStream in = (FileInputStream) file.getInputStream();//载入 文档
        // 处理docx格式 即office2007以后版本
        if (file.getOriginalFilename().endsWith("docx")) {
            //word 2007 图片不会被读取, 表格中的数据会被放在字符串的最后
            XWPFDocument xwpf = new XWPFDocument(in);//得到word文档的信息
            Iterator<XWPFTable> itpre = xwpf.getTablesIterator();//得到word中的表格
            int total = 0;
            while (itpre.hasNext()) {
                itpre.next();
                total += 1;
            }
            Iterator<XWPFTable> it = xwpf.getTablesIterator();//得到word中的表格
            // 设置需要读取的表格  set是设置需要读取的第几个表格,total是文件中表格的总数
            int set = 1;
            int num = set;
            // 过滤前面不需要的表格
            for (int i = 0; i < set - 1; i++) {
                it.hasNext();
                it.next();
            }
            List<List<String>> tableList = new ArrayList<>();
            while (it.hasNext()) {
                XWPFTable table = it.next();
                //System.out.println("这是第" + num + "个表的数据");
                List<XWPFTableRow> rows = table.getRows();
                //读取每一行数据
                for (int i = 0; i < rows.size(); i++) {
                    XWPFTableRow row = rows.get(i);
                    //读取每一列数据
                    List<XWPFTableCell> cells = row.getTableCells();
                    List<String> rowList = new ArrayList<>();
                    for (int j = 0; j < cells.size(); j++) {
                        XWPFTableCell cell = cells.get(j);
                        rowList.add(cell.getText());
                        //输出当前的单元格的数据
                        //System.out.print(cell.getText()+"["+i+","+j+"]" + "\t");
                    }
                    tableList.add(rowList);
                    //System.out.println();
                }
                // 过滤多余的表格
                while (num < total) {
                    it.hasNext();
                    it.next();
                    num += 1;
                }
            }
            return tableList;
        } else {
            // 处理doc格式 即office2003版本
            POIFSFileSystem pfs = new POIFSFileSystem(in);
            HWPFDocument hwpf = new HWPFDocument(pfs);
            Range range = hwpf.getRange();//得到文档的读取范围
            TableIterator itpre = new TableIterator(range);
            ;//得到word中的表格
            int total = 0;
            while (itpre.hasNext()) {
                itpre.next();
                total += 1;
            }
            TableIterator it = new TableIterator(range);
            // 迭代文档中的表格
            // 如果有多个表格只读取需要的一个 set是设置需要读取的第几个表格,total是文件中表格的总数
            int set = 1;
            int num = set;
            for (int i = 0; i < set - 1; i++) {
                it.hasNext();
                it.next();
            }
            List<List<String>> tableList = new ArrayList<>();
            while (it.hasNext()) {
                Table tb = (Table) it.next();
                //System.out.println("这是第" + num + "个表的数据");
                //迭代行,默认从0开始,可以依据需要设置i的值,改变起始行数,也可设置读取到那行,只需修改循环的判断条件即可
                for (int i = 0; i < tb.numRows(); i++) {
                    List<String> rowList = new ArrayList<>();
                    TableRow tr = tb.getRow(i);
                    //迭代列,默认从0开始
                    for (int j = 0; j < tr.numCells(); j++) {
                        TableCell td = tr.getCell(j);//取得单元格
                        //取得单元格的内容
                        for (int k = 0; k < td.numParagraphs(); k++) {
                            Paragraph para = td.getParagraph(k);
                            String s = para.text();
                            //去除后面的特殊符号
                            if (null != s && !"".equals(s)) {
                                s = s.substring(0, s.length() - 1);
                            }
                            rowList.add(s);
                            //System.out.print(s+"["+i+","+j+"]" + "\t");
                        }
                    }
                    tableList.add(rowList);
                    //System.out.println();
                }
                // 过滤多余的表格
                while (num < total) {
                    it.hasNext();
                    it.next();
                    num += 1;
                }
            }
            return tableList;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

已秃头的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值