poi 读取word 遍历表格和单元格中的图片

简介: poi 读取word 遍历表格和单元格中的图片

背景

项目需要解析word表格

image.png

  • 需要批量导入系统,并保存每行信息到数据库
  • 并且要保存word中的图片,
  • 并保持每条信息和图片的对应关系
  • 一行数据可能有多条图片

解决办法

没有找到现成的代码,怎么办呐?看源码吧

分享快乐

给出代码

package com.util;
import org.apache.poi.xwpf.usermodel.*;
import org.jeecgframework.core.common.model.json.AjaxJson;
import org.jeecgframework.poi.word.entity.MyXWPFDocument;
import org.jeecgframework.poi.word.parse.excel.ExcelEntityParse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.imageio.stream.FileImageOutputStream;
import java.io.*;
import java.util.Iterator;
import java.util.List;
public class WordImportUtil {
    private static final Logger logger = LoggerFactory.getLogger(WordImportUtil.class);
    public static MyXWPFDocument getXWPFDocumen(InputStream is) {
        try {
            MyXWPFDocument doc = new MyXWPFDocument(is);
            return doc;
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        } finally {
            try {
                is.close();
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
            }
        }
        return null;
    }
    public static AjaxJson parseThisTable(MyXWPFDocument doc){
        Iterator<XWPFTable> itTable = doc.getTablesIterator();
        XWPFTable table;
        while (itTable.hasNext()) {
            table = itTable.next();
            XWPFTableRow row;
            List<XWPFTableCell> cells;
            Object listobj;
            ExcelEntityParse excelEntityParse = new ExcelEntityParse();
            for (int i = 0; i < table.getNumberOfRows(); i++) {
                if(i ==0)
                    continue;
                row = table.getRow(i);
                cells = row.getTableCells();
                for (int j = 0; j < cells.size(); j++) {
                    XWPFTableCell cell = cells.get(j);
                    if(j == 10){
                        getCellImage(cell);
                    }
                    //输出当前的单元格的数据
                    System.out.print(cell.getText() + "\t");
                }
            }
        }
        return null;
    }
    public static  String getCellImage(XWPFTableCell cell){
        List<XWPFParagraph> xwpfParagraphs =  cell.getParagraphs();
        if(xwpfParagraphs == null) return null;
        for(XWPFParagraph xwpfParagraph:xwpfParagraphs){
            List<XWPFRun> xwpfRunList = xwpfParagraph.getRuns();
            if(xwpfRunList==null) return null;
            for(XWPFRun xwpfRun:xwpfRunList){
                List<XWPFPicture> xwpfPictureList =  xwpfRun.getEmbeddedPictures();
                if(xwpfParagraph==null) return null;
                for(XWPFPicture xwpfPicture:xwpfPictureList){
                    xwpfPicture.getPictureData().getData();
                    xwpfPicture.getPictureData().getFileName();
                    byte2image( xwpfPicture.getPictureData().getData(),"d:/"+ xwpfPicture.getPictureData().getFileName());
                }
            }
        }
        return "";
    }
    public static  void byte2image(byte[] data,String path){
        if(data.length<3||path.equals("")) return;
        FileImageOutputStream imageOutput = null;
        try{
            imageOutput = new FileImageOutputStream(new File(path));
            imageOutput.write(data, 0, data.length);
            System.out.println("Make Picture success,Please find image in " + path);
        } catch(Exception ex) {
            System.out.println("Exception: " + ex);
            ex.printStackTrace();
        }finally {
            try {
                imageOutput.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) throws Exception{
        MyXWPFDocument myXWPFDocument = getXWPFDocumen(new FileInputStream("d:/园艺作物加工副产物适宜性评价填写.docx"));
        parseThisTable(myXWPFDocument);
    }
}
相关文章
|
7月前
|
Java Apache 索引
POI操作大全(动态合并单元格,为单元格生成一个自定义的数据显示格式,自定义公式计算结果生成,读取excel,word文件在生成图片,word指定位置生成图片)
POI操作大全(动态合并单元格,为单元格生成一个自定义的数据显示格式,自定义公式计算结果生成,读取excel,word文件在生成图片,word指定位置生成图片)
1032 0
|
小程序 Python
Python实现读取Word表格计算汇总写入Excel
本文通过一个实例介绍了通过Python实现读取Word表格计算汇总写入Excel
181 0
Python实现读取Word表格计算汇总写入Excel
【Word】双栏布局中插入跨栏表格
【Word】双栏布局中插入跨栏表格
789 0
POI的入门学习(二)遍历工作簿的行和列输出单元格内容
POI的入门学习(二)遍历工作簿的行和列输出单元格内容
POI的入门学习(二)遍历工作簿的行和列输出单元格内容
poi 生成word 表格,并向表格单元格中插入多个图片
poi 生成word 表格,并向表格单元格中插入多个图片
475 0
poi 生成word 表格,并向表格单元格中插入多个图片
将excel文件中的内容转换成word文本(去表格)
将excel文件中的内容转换成word文本(去表格)
598 0
将excel文件中的内容转换成word文本(去表格)
excel使用poi获取单元格类型和数据、判断单个单元格为空、判断每行列数是否相等问题
excel使用poi获取单元格类型和数据、判断单个单元格为空、判断每行列数是否相等问题
614 0
关于 在word中插入表格跨页后每一页表格都显示标题栏 的解决方法
关于 在word中插入表格跨页后每一页表格都显示标题栏 的解决方法
关于 在word中插入表格跨页后每一页表格都显示标题栏 的解决方法
|
C# 搜索推荐
C# 在Word中添加表格的方法
表格是组织整理数据的一种重要手段,应在生活中的方方面面。在Word文档中将繁杂的文字表述内容表格化,能快速、直接地获取关键内容信息。那么,通过C#,我们也可以在Word文档中添加表格,这里将介绍两种不同的表格添加方法。
1072 0