Как выполняется экспорт картинок из Excel

Существует несколько способов извлечения картинок с листа Excel в файлы.
Все эти способы обладают преимуществами и недостатками, ввиду того что Microsoft почему-то не предусмотрел «нормального» (простого и удобного) способа экспорта изображений из Excel

В надстройке PastePictures реализованы способы 1 и 3

 

Способ 1: перебираем все картинки, каждую картинку копируем, а потом сохраняем содержимое буфера обмена в файл

Преимущества этого способа:

  • прост в релизации, если сохранять картинки в формате BMP (без сжатия, большой объем файлов)

Недостатки этого способа:

  • картинки извлекаются в том размере, в каком отображаются на листе (информации об исходном размере картинок, который был до вставки, у картинок нет)
  • достаточно сложен в реализации, при необходимости сохранять изображения в сжатом виде (формат JPG)
  • работает сравнительно медленно, при большом объеме картинок
  • использует буфер обмена, который может быть изменён / очищен в любой момент сторонними программами

До недавнего времени, этот способ экспорта (его сложный вариант, с экспортом в JPG) был единственным, реализованным в надстройке PastePictures

 

Способ 2: перебираем все картинки, каждую картинку копируем, вставляем в объект «диаграмма», а потом экспортируем диаграмму в файл

Преимущества этого способа:

  • прост в реализации
  • есть возможность сохранять изображения в сжатом виде (форматы JPG, PNG)

Недостатки этого способа:

  • в разных версиях Excel, у экспортируемых изображений могут появляться рамки, унаследованные от диаграммы
    (это основная причина, почему я отказался от использования этого способа)
  • картинки извлекаются в том размере, в каком отображаются на листе (информации об исходном размере картинок, который был до вставки, у картинок нет)
  • работает сравнительно медленно, при большом объеме картинок
  • использует буфер обмена, который может быть изменён / очищен в любой момент сторонними программами

 

Способ 3: пересохраняем файл Excel в формат XML (расширение XLSX или XLSM), открываем полученный файл как архив, анализируем содержимое XML файлов (чтобы сопоставить, какая картинка в какой ячейке была), сами картинки хранятся в исходном виде в отдельной папке архива

Преимущества этого способа:

  • единственный реальный способ добраться до полноразмерных изображений в файле Excel, сохранив информацию о том, какая картинка в какой ячейке хранится
  • работает достаточно быстро

Недостатки этого способа:

  • требуется разархивирование файла формата ZIP (XLSX — это тот же ZIP)
    Встроенные в Windows средства разархивирования работают не всегда стабильно, поэтому надстройка PastePictures пытается использовать программу WinRAR для распаковки архива (если, конечно, WinRAR на компьютере установлен)
  • сложен в реализации (требуется парсинг нескольких XML файлов из структуры документа Excel, для сопоставления картинок с ячейками)
  • работает только в версиях Excel от 2007 и выше (с момента появления новых форматов файлов в Office)

Этот способ экспорта изображений сейчас является основным в надстройке PastePictures (при включенной опции «Использовать полноразмерные изображения»)

 

Способ 4: пересохраняем файл Excel в формате «Веб-страница», получая файл формата HTML, а рядом с ним — папку с картинками, в которой находятся все графические объекты из файла Excel

Преимущества этого способа:

  • единственный способ добраться до картинок вручную (в пару нажатий), без использования макросов
  • работает очень быстро
  • все изображения - полноразмерные (как в способе #3)
  • работает в любой версии Excel

Недостатки этого способа:

  • невозможно (точнее, крайне сложно) сопоставить картинки в папке с ячейками, где они хранились
    Т.е. мы получаем все картинки, но они имеют имена вида Image4.png, и нет никакой возможности переименовать их, взяв соответствующие имена файлов из ячеек рядом с картинками.
    Поскольку редко когда нужны картинки под случаными именами файлов, этот способ в надстройке PastePictures не реализован.