我有一张 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将代码粘贴到某处并在编辑器中运行
使用的资源
- http://www.jpsoftwaretech.com/export-excel-range-to-a-picture-file-redux/
- https://stackoverflow.com/questions/14629418/vba-how-to-set-width-and-height-of-an-excel-chart-in-pixels
解决方案 #2
使用图形导出器(Excel 插件)
此插件将允许您将图片、形状、图表等导出到图像文件。
64 位问题
即便是新版本Office 2007 是为 32 位系统编译的。除非您按照说明修复代码,否则它无法在 64 位 Windows 上运行堆栈溢出。
我已经为您做了这些小修复。下载 64 位版本这里。
答案2
下载 OpenOffice 或更好的 LibreOffice,然后安装。如果不想弄乱系统,可以使用安装版。在 Calc 中打开文档。将其另存为 ods。打开 Windows 资源管理器。将扩展名 .ods 更改为 .zip。然后解压文件。里面有一个图像文件夹,里面有所有图像,全质量,未缩放,可能是 PNG,质量比 JPEG 更好。
附言:也许我的解决方案并不完全符合您的要求,但对我来说,这是从 MS Office 文档中获取所有图像的最简单方法。它也适用于 Word,可能也适用于 Powerpoint。