web-dev-qa-db-ja.com

Excelで重複した画像を別のJPEGに保存する方法

ある列にオブジェクトとして保存され、別の列に製品名として保存されている画像を含むExcelシートがあります。すべての画像をJPEGファイルに抽出しようとしていました。これは、ExcelシートをHTMLドキュメントとして保存することで実現できました。

これは私に次のファイルを与えました

  • HTMLファイル
  • すべての画像とXMLファイルが含まれるフォルダ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を受け取ります。

3
TDsouza

(冗長な画像もエクスポートされるため、どちらのソリューションも抽出方法よりも優れています)

解決策#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アドイン)

このアドインを使用すると、画像、図形、グラフなどを画像ファイルにエクスポートできます。

enter image description here

64ビットの問題

Office 2007の 新しいバージョン でさえ、32ビットシステム用にコンパイルされています。 Stackoverflow で説明されているようにコードを修正しない限り、64ビットWindowsでは実行されません。
私はあなたのためにそれらの小さな修正を行いました。 64ビットバージョンをダウンロード ここ

4
nixda

OpenOffice以上のLibreOfficeをダウンロードしてインストールします。システムを台無しにしたくない場合は、install-on-a-stickバージョンを使用できます。 Calcでドキュメントを開きます。 odsとして保存します。 Windowsエクスプローラーを開きます。拡張子.odsを.Zipに変更します。次に、ファイルを解凍します。内部には、JPEGよりも高品質のPNGとして、拡大縮小されていないフル品質のすべての画像を含む画像フォルダがあります。

PS:私の解決策はあなたが求めていたものではないかもしれませんが、私にとってこれはMSOfficeドキュメントからすべての画像を取得する最も簡単な方法です。 Wordでも機能します。おそらくPowerPointでも機能します。

0
SPRBRN