zoukankan      html  css  js  c++  java
  • 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() + "	");
                    }
    
                }
    
            }
            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);
        }
    
    }
    
    
  • 相关阅读:
    杂谈-论时间成本
    java笔记:排错5:误删maven target:恢复不了,怎么再生成
    十大经典排序(转发帖)
    java笔记(Idea,Maven):误删maven项目的target的class,怎么再生成target
    JDK解压版制作
    日常报错记录4:ssh工程复制粘贴顺序。
    欧朋Opera 浏览器(打不开百度)提示“您的连接不是私密连接”,解决办法
    日常报错记录2: MyBatis:DEBUG [main]
    JavaWeb-SQL-Servlet-JSP学做购物系统——日志一
    git 命令
  • 原文地址:https://www.cnblogs.com/qingmiaokeji/p/10988915.html
Copyright © 2011-2022 走看看