使用Python在XLSX中处理图像

时间:2018-08-25 20:29:22

标签: python excel openpyxl

我有一个xlsx,它有两张纸:on在G1:O25中有一些数据(我们称之为“数据”),另一张在G1:O25中的单元格中有一些图像插入了(我们将其称为“图像”)。

我的目标是使用Python使用图像过滤数据。我想要一个弹出窗口,显示我来自单元格G1的图像以及一个复选框或包含/排除此数据点的内容。然后使用包含的数据点创建一个新的工作表(“过滤的数据”)。

我是Python的新手,请耐心等待,但是我从搜索中发现了几点:

  1. 我可以将数据加载到列表中。
  2. xlsx文件实际上是zip文件,因此我可以使用zipfile和matplotlib从显示它们的子目录中读取图像。
  3. 添加复选框并进行过滤应该不难。

我遇到的问题:

  1. 由于openpyxl在读取/写入工作簿时不会保留图像,因此在添加“过滤的数据”表时会丢失图像。也许有一种解决方法,例如保存到单独的工作表并使用COM?
  2. 尽管我可以使用zip方法加载图像,但是我丢失了与图像关联的单元的信息。它们在xlsx / zip文件中按逻辑顺序排列,但是有时会丢失图像(即说单元格K11没有图像),所以我不能仅仅假设image1.jpeg对应于单元格G1,依此类推,依此类推向前)。我不确定在excel文件的哪里可以找到将图像关联到电子表格中其各自单元格的信息。

提前谢谢

1 个答案:

答案 0 :(得分:0)

根据how to get the relative position of shapes within a worksheet,在Excel对象模型中,通过其.TopLeftCell属性获得与图像相邻的单元格:

test pictures

import win32com.client
x=win32com.client.Dispatch("Excel.Application")
wb=x.Workbooks.Open("<path_to.xlsx>")
ws=wb.Sheets("Sheet1")
for i in ws.Shapes:
    print i.TopLeftCell.Address

打印:

$B$2
$B$5
$D$3