Обработка изображений в XLSX с использованием Python - PullRequest
0 голосов
/ 25 августа 2018

У меня есть 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 голосов
/ 29 августа 2018

В соответствии с как получить относительное положение фигур на листе , в объектной модели 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
...