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

Posted qingmiaokeji

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poi 读取word 遍历表格和单元格中的图片相关的知识,希望对你有一定的参考价值。

背景

项目需要解析word表格
技术图片

  • 需要批量导入系统,并保存每行信息到数据库
  • 并且要保存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);
    


以上是关于poi 读取word 遍历表格和单元格中的图片的主要内容,如果未能解决你的问题,请参考以下文章

java用poi导出word文档,我要导出一个表格,表格的单元格中还要有一个表格,请问怎么实现

poi读取复杂的Excel表格,如图

java poi 生成word表格怎么 让表格填充整个页面和合并单元格

poi如何设置word中的表格自动换行

easypoi导出word表格怎么遍历数据

java中poi如何读取不同word中的表格写入到另一个word中,就是把几个word中的表格合并,如何实现