ある列にオブジェクトとして保存され、別の列に製品名として保存されている画像を含むExcelシートがあります。すべての画像をJPEGファイルに抽出しようとしていました。これは、ExcelシートをHTMLドキュメントとして保存することで実現できました。
これは私に次のファイルを与えました
filelist.xml
すべての画像ファイルのリスト次に、一方の列に製品名、もう一方の列に画像ファイル名を含む新しいExcelシートを作成する必要があります。作成したXMLファイルfilelist.xmlを使用してこれを実現できました。
しかし、これは新しい問題をもたらしました
私の元のExcelシートには、たとえば次のような製品の特定のバリエーションがありました。 (Product1白、Product1緑、Product1赤、Product1青)
製品の色は少し異なりますが、関連する画像オブジェクトが繰り返されました。基本的に、4つすべてが同じ対応する画像を持っていました。このファイルをHTMLとして保存しているときに、4つではなく1つの画像ファイルしか見つかりませんでした。
また、XMLファイルには4つではなく1つのエントリしかないため、XMLから作成する新しいExcelシートにも4つではなく1つのエントリがあります。
同じオブジェクトが類似の製品に4回使用されていますが、それらは異なる名前で保存されているようです。 (1番目をクリックすると「picture1」、2番目の「picture2」などが表示されます)。これにより、画像を個別に保存する方法があるのではないかと期待しているので、1つではなく4つのJPEGを受け取ります。
(冗長な画像もエクスポートされるため、どちらのソリューションも抽出方法よりも優れています)
これは、ワークブックからすべての画像をエクスポートするための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アドイン)
このアドインを使用すると、画像、図形、グラフなどを画像ファイルにエクスポートできます。
Office 2007の 新しいバージョン でさえ、32ビットシステム用にコンパイルされています。 Stackoverflow で説明されているようにコードを修正しない限り、64ビットWindowsでは実行されません。
私はあなたのためにそれらの小さな修正を行いました。 64ビットバージョンをダウンロード ここ 。
OpenOffice以上のLibreOfficeをダウンロードしてインストールします。システムを台無しにしたくない場合は、install-on-a-stickバージョンを使用できます。 Calcでドキュメントを開きます。 odsとして保存します。 Windowsエクスプローラーを開きます。拡張子.odsを.Zipに変更します。次に、ファイルを解凍します。内部には、JPEGよりも高品質のPNGとして、拡大縮小されていないフル品質のすべての画像を含む画像フォルダがあります。
PS:私の解決策はあなたが求めていたものではないかもしれませんが、私にとってこれはMSOfficeドキュメントからすべての画像を取得する最も簡単な方法です。 Wordでも機能します。おそらくPowerPointでも機能します。