如何将 Excel 中的重复图像保存为不同的 JPEG

如何将 Excel 中的重复图像保存为不同的 JPEG

我有一张 Excel 工作表,其中的图像作为对象存储在一列中,产品名称存储在另一列中。我试图将所有图像提取到 JPEG 文件中。我通过将 Excel 工作表保存为 HTML 文档实现了这一点。

这给了我以下文件

  • HTML 文件
  • filelist.xml包含所有图像的文件夹以及包含所有图像文件列表的XML 文件

现在我需要创建一个新的 Excel 表,其中一列包含产品名称,另一列包含图像文件名称。我可以使用创建的 XML 文件 filelist.xml 来实现这一点。


然而,这又带来了一个新问题

我原来的 Excel 表有某些产品变体,例如(产品 1 白色、产品 1 绿色、产品 1 红色、产品 1 蓝色)

虽然产品的颜色略有不同,但相关的图像对象是重复的。基本上这四个都有相同的对应图像。现在,在将此文件保存为 HTML 时,我发现只有一个图像文件,而不是四个。

此外,XML 文件只有一个条目而不是四个,因此我从 XML 创建的新 Excel 表也有一个条目而不是四个。

尽管同一对象被四次用于类似产品,但它们似乎以不同的名称存储。(单击第一个显示“图片 1”,单击第二个显示“图片 2”等)。这让我希望也许有一种方法可以单独保存图像,这样我就可以收到四张 JPEG 而不是一张。

答案1

(这两种解决方案都优于提取方法,因为冗余图像也会被导出)

解决方案 #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

如何使用

  • Alt使用+打开 Excel 工作簿和 VBA 编辑器F11
  • F5将代码粘贴到某处并在编辑器中运行

使用的资源


解决方案 #2

使用图形导出器(Excel 插件)

此插件将允许您将图片、形状、图表等导出到图像文件。

在此处输入图片描述

64 位问题

即便是新版本Office 2007 是为 32 位系统编译的。除非您按照说明修复代码,否则它无法在 64 位 Windows 上运行堆栈溢出
我已经为您做了这些小修复。下载 64 位版本这里

答案2

下载 OpenOffice 或更好的 LibreOffice,然后安装。如果不想弄乱系统,可以使用安装版。在 Calc 中打开文档。将其另存为 ods。打开 Windows 资源管理器。将扩展名 .ods 更改为 .zip。然后解压文件。里面有一个图像文件夹,里面有所有图像,全质量,未缩放,可能是 PNG,质量比 JPEG 更好。

附言:也许我的解决方案并不完全符合您的要求,但对我来说,这是从 MS Office 文档中获取所有图像的最简单方法。它也适用于 Word,可能也适用于 Powerpoint。

相关内容