3

У меня есть лист Excel с изображениями, которые хранятся в виде объектов в одном столбце, а названия продуктов - в другом. Я пытался извлечь все изображения в файлы JPEG. Я смог добиться этого, сохранив лист Excel в виде HTML-документа.

Это дало мне следующие файлы

  • HTML-файл
  • Папка со всеми изображениями вместе с файлом XML filelist.xml со списком всех файлов изображений

Теперь мне нужно создать новый лист Excel, в котором имена продуктов указаны в одном столбце, а имена файлов изображений - в другом. Я смог добиться этого, используя созданный файл XML filelist.xml.


Однако это породило новую проблему.

У моего оригинального листа Excel были определенные варианты продуктов, например, для (Product1 белый, Product1 зеленый, Product1 красный, Product1 синий)

В то время как продукты немного отличаются по цвету, связанный объект изображения был повторен. В основном все четыре имели одинаковое соответствующее изображение. Теперь, сохраняя этот файл как HTML, я нашел только один файл изображения вместо четырех.

Кроме того, в файле XML была только одна запись вместо четырех, поэтому новый лист Excel, который я создаю из XML, также содержит одну запись вместо четырех.

Хотя один и тот же объект используется четыре раза для аналогичных продуктов, они, похоже, хранятся под разными именами. (Нажатие на 1-й показало "picture1", второе "picture2" и т.д.). Это дало мне надежду, что, возможно, есть способ сохранить изображения по отдельности, поэтому я получаю четыре JPEG вместо одного.

2 ответа2

4

(оба решения превосходят метод извлечения, поскольку также экспортируются избыточные изображения)

Решение № 1

Вот мой макрос VBA для экспорта всех изображений из рабочей книги.
Изображения будут сохранены в папке по вашему выбору, а имя внутреннего объекта Excel используется в качестве имени файла изображения. Код комментируется и не так сложно.

Sub ExportPictures()
    '## Open file dialog to choose a destination folder
    Set FOLDER = Application.FileDialog(msoFileDialogFolderPicker)
    FOLDER.AllowMultiSelect = False
    FOLDER.Show

    '## loop through all sheets and all pictures
    For Each WS In ThisWorkbook.Sheets
    For Each PIC In WS.Shapes

        '## create a chart with same dimensions as current picture
        '## subtract 0.5px from chart dimensions to avoid a strange border
        Set CH = WS.ChartObjects.Add(1, 1, PIC.Height, PIC.Width)

        '## save & temporarly disable the picture border
        PIC.Select
        PICBORDER = Selection.Border.LineStyle
        Selection.Border.LineStyle = 0

        '## copy the picture into chart. Only a chart could be exported
        PIC.Copy
        CH.Chart.ChartArea.Select
        CH.Chart.Paste

        '## re-enable the old picture border
        PIC.Select
        Selection.Border.LineStyle = PICBORDER

        '## export the chart as JPG. Change JPG to PNG if desired
        CH.Chart.Export Filename:=FOLDER.SelectedItems(1) & "\" & PIC.Name & ".jpg", FilterName:="JPG"

        '## delete chart to clean up our work
        CH.Cut

    Next PIC
    Next WS
End Sub

Как пользоваться

  • Откройте книгу Excel и редактор VBA с помощью Alt+F11
  • Вставьте код куда-нибудь и запустите его с помощью F5 в редакторе

Использованные ресурсы


Решение № 2

Использовать экспортер графики (надстройка Excel)

Эта надстройка позволит вам экспортировать изображения, фигуры, диаграммы и многое другое в файлы изображений.

64-битная проблема

Даже новая версия для Office 2007 скомпилирована для 32-битных систем. Он не будет работать в 64-битной Windows, если вы не исправите код, как описано в Stackoverflow.
Я сделал эти небольшие исправления для вас. Загрузите 64-битную версию здесь.

0

Скачайте OpenOffice или лучше LibreOffice и установите его. Вы можете использовать версию «установить на флешку», если не хотите связываться с вашей системой. Откройте документ в Calc. Сохранить как шансы Откройте проводник Windows. Измените расширение .ods на .zip. Затем распакуйте файл. Внутри находится папка с изображениями, все изображения в полном качестве, не масштабированные, вероятно, в формате PNG, что лучше, чем JPEG.

PS: возможно, мое решение не совсем то, что вы просили, но для меня это самый простой способ получить все изображения из документа MS Office. Это работает и для Word, возможно, для Powerpoint.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .