在我的一个项目中,需要分析客户提供的Excel, 读出其中的图片信息(显示在Excel的第几行,第几列,以及图片本身)。

网络上有许多使用Open Xml插入图片到Word,Excel的文章, 但是却没有读取分析其中图片的。经过多次分析及试验,终于达成了这个目标,本文将简要描述如何读取Excel中的图片。

下图所示为一个包含图片的Excel文件的范例, 在这个Excel中,第4列,第10列都插入了图片。

我们把这个excel(.xlsx)文件另存为.zip文件,并解压,得到下图的目录结构,从中我们可以看出文件都是保留在media文件夹下的

而下图所示Drawing文件夹里则定义了Excel每个工作表中图片如何显示(即把某个图片显示在Excel 某个工作表中的第几行,第几列)

因此我们要做的就是读取Drawing 中的图片定义,并从Media中读取对应的图片出来。 在我的应用中,我使用如下数据结构来定义匹配关系

public classPictureInfo{public int FromRow { get; set; }public int FromCol { get; set; }public Image Image { get; set; }}

读取匹配关系的代码如下:

List<PictureInfo> pictures = null;using (SpreadsheetDocument document = SpreadsheetDocument.Open(@txtFile.Text, true)){WorkbookPart wbPart=document.WorkbookPart;var sheets = wbPart.Workbook.Sheets.Take(1);foreach (Sheet sheet insheets){WorksheetPart wsPart=(WorksheetPart)wbPart.GetPartById(sheet.Id);DrawingsPart drawingPart= wsPart.GetPartsOfType<DrawingsPart>().ToList().FirstOrDefault();
pictures= new List<PictureInfo>();if(drawingPart != null){foreach (var part indrawingPart.Parts){PictureInfo pic= newPictureInfo();ImagePart imgPart=(ImagePart)part.OpenXmlPart ;Image img1=Image.FromStream(imgPart.GetStream());pic.Image=img1;pictures.Add(pic);}var worksheetDrawings = drawingPart.WorksheetDrawing.Where(c =>c.ChildElements.Any( a=>a.GetType().FullName == "DocumentFormat.OpenXml.Drawing.Spreadsheet.Picture")).ToList();foreach (var worksheetDrawing inworksheetDrawings){if (worksheetDrawing.GetType().FullName == "DocumentFormat.OpenXml.Drawing.Spreadsheet.TwoCellAnchor"){TwoCellAnchor anchor=(TwoCellAnchor)worksheetDrawing;DocumentFormat.OpenXml.Drawing.Spreadsheet.Picture picDef=(DocumentFormat.OpenXml.Drawing.Spreadsheet.Picture)anchor.ChildElements.FirstOrDefault(c=> c.GetType().FullName =="DocumentFormat.OpenXml.Drawing.Spreadsheet.Picture");if (picDef != null){var embed =picDef.BlipFill.Blip.Embed;if (embed != null){var picMapping = pictures.FirstOrDefault(c => c.RefId ==embed.InnerText);picMapping.FromCol= int.Parse(anchor.FromMarker.ColumnId.InnerText);picMapping.FromRow= int.Parse(anchor.FromMarker.RowId.InnerText);}}//anchor.FromMarker.RowId + anchor.FromMarker.ColumnId
}}}}}//把图片信息显示在DataGridView中var pic1 = pictures.OrderBy(c => c.FromCol).OrderBy(c=>c.FromRow).ToList();dataGridView1.AutoGenerateColumns= true;dataGridView1.DataSource= pic1;

转载于:https://www.cnblogs.com/Hcsdn/p/3225581.html

Open Xml 读取Excel中的图片相关推荐

  1. vb.net读取excel并写入dgv_如何用Python读取Excel中的图片?然后写入图片?

    大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进行分析. 那么你知道如何使用Python读 ...

  2. Python读取excel中的图片

    Python读取excel中的图片 一.读取excel文件 我们先来看看如何读取excel文件,读取excel文件的方式很多.这里选择openpyxl模块,安装语句如下: pip install op ...

  3. python读取excel图片尺寸_Python读取excel中的图片完美解决方法

    excel中有图片是很常见的,但是通过python读取excel中的图片没有很好的解决办法. 网上找了一种很聪明的方法,原理是这样的: 1.将待读取的excel文件后缀名改成zip,变成压缩文件. 2 ...

  4. Java读取Excel中的图片,并保存

    说明 本文代码转载自以下博客 https://www.cnblogs.com/shuilangyizu/p/11937039.html 原博文更强更猛. 注意: ● 以下代码按我自己的实际需求,略作修 ...

  5. 怎么用python读取excel图_Python如何读取excel中的图片

    学会用Python提取word图片的小伙伴,今天又来学提取excel图片的方法啦.本期文章将通过python的包来提取,对比以往的代码更加简洁方便. 环境准备: python3 pillowpip i ...

  6. 如何用Python读取Excel中图片?又如何用Python往Excel中写入图片?

    大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进行分析. 那么你知道如何使用Python读 ...

  7. python 读取excel图片_如何用Python读取Excel中图片?

    公众号: 早起Python 作者:刘早起 大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进 ...

  8. 怎么用python读取excel图_如何用Python读取Excel中图片?

    公众号: 早起Python 作者:刘早起 大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进 ...

  9. python读取excel批量下载图片

    需求: 有一个Excel表格,里面存储了很多图片地址,要把这些图片批量下载到本地 # 读取Excel中的图片地址,下载图片 # 导入2个包,导入方法为命令行里执行pip install openpyx ...

  10. java 读取excel 图片_利用Java+POI 读写Excel文档向Excel中插入图片

    一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...

最新文章

  1. 17岁读大学,25岁博士毕业,高颜值医生爆红网络,却坦言只是普通人
  2. VMWare 虚拟机启动报“内部错误”的解决办法
  3. centos6.5环境下zookeeper-3.4.6集群环境部署及单机部署详解
  4. linux7 samba,Centos 7使用Samba实现文件共享
  5. 智慧城市路在何方?合肥三十万重金诚邀大数据英才!
  6. boolean类型默认值_【Java基础】还在问String属于什么数据类型
  7. 你对NLP的迁移学习爱的有多深?21个问题弄懂最新的NLP进展。
  8. 2.7 HDFS的使用
  9. Struts Menu中基于角色的权限管理
  10. 手机离线地图地图数据包教程
  11. 计算机重启后打印机无法连接不上,笔记本之前连上了打印机,重启路由后就连不上了,什么原因...
  12. 403 Forbidden - PUT https://registry.npmjs.org/- Forbidden
  13. 虚幻引擎4总是遇到崩溃卡顿情况,这8个方法一定要试试
  14. 抓包神器:Charles
  15. Android -- XML属性
  16. 开发常用到的工具有哪些
  17. arduino陀螺仪蓝牙通讯手势小车
  18. 9月17-18日黑客马拉松挑战赛-北京站
  19. 树莓派怎么作为无线服务器,教大家用树莓派做一个无线路由器
  20. 四级,四级,四级!!!!

热门文章

  1. 人工智能数学基础之线性代数(持续更新)
  2. 从Google到Facebook再到微博,算法与数据中台大咖谈
  3. 敏捷无它,唯持续改进
  4. Android技术专家 高焕堂 推荐这本书
  5. 王者荣耀s18赛季服务器什么时候维护好,王者荣耀S18赛季开始时间是什么时候?王者荣耀S18赛季开始时间一览-超能街机...
  6. java chatat delete,StringBuffer deleteCharAt(int index)
  7. python皮卡丘编程代码_儿童Python代码编程库Pygame Zero介绍
  8. 现代控制理论概念梳理(脑图)
  9. php laravel设置创建目录的权限,在Laravel5中正确设置文件权限的方法
  10. 蓝桥杯2015年第六届C/C++B组省赛第八题-移动距离