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文档,我要导出一个表格,表格的单元格中还要有一个表格,请问怎么实现