Frage So speichern Sie doppelte Bilder in Excel zu verschiedenen JPEGs


Ich habe ein Excel-Blatt mit Bildern, die als Objekte in einer Spalte und Produktnamen in einem anderen gespeichert sind. Ich habe versucht, alle Bilder in JPEG-Dateien zu extrahieren. Dies konnte ich erreichen, indem ich das Excel-Blatt als HTML-Dokument speicherte.

Dies gab mir die folgenden Dateien

  • Eine HTML-Datei
  • Ein Ordner mit allen Bildern zusammen mit einer XML-Datei filelist.xml mit einer Liste aller Bilddateien

Jetzt muss ich ein neues Excel-Blatt erstellen, das die Produktnamen in der einen Spalte und die Bilddateinamen in der anderen Spalte enthält. Dies konnte ich mit der erstellten XML-Datei filelist.xml erreichen.


Dies hat jedoch ein neues Problem eingeführt

Meine ursprüngliche Excel-Tabelle hatte bestimmte Varianten von Produkten für z.B. (Produkt1 weiß, Produkt1 grün, Produkt1 rot, Produkt1 blau)

Während sich die Produkte in der Farbe ein wenig unterscheiden, wurde das zugehörige Bildobjekt wiederholt. Grundsätzlich hatten alle vier das gleiche Bild. Jetzt, während ich diese Datei als HTML speicherte, fand ich nur eine Bilddatei statt vier.

Außerdem hatte die XML-Datei nur einen Eintrag anstelle von vier, und daher hat das neue Excel-Blatt, das ich aus XML erstelle, auch einen Eintrag statt vier.

Obwohl dasselbe Objekt viermal für ähnliche Produkte verwendet wird, scheinen sie unter verschiedenen Namen gespeichert zu sein. (Klicken auf den 1. zeigte "Bild1", das zweite "Bild2" usw.). Das hat mir Hoffnung gegeben, dass es vielleicht eine Möglichkeit gibt, Bilder einzeln zu speichern, so dass ich vier JPEG statt eins erhalte.


3
2017-07-26 08:25


Ursprung




Antworten:


(Beide Lösungen sind der Extraktmethode überlegen, da auch redundante Bilder exportiert werden)

Lösung # 1

Hier ist mein VBA-Makro, um alle Bilder aus einer Arbeitsmappe zu exportieren.
Die Bilder werden in einem Ordner Ihrer Wahl gespeichert und der interne Objektname von Excel wird als Dateiname für Bilder verwendet. Der Code ist kommentiert und nicht so schwierig.

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

Wie benutzt man

  • Öffnen Sie Ihre Excel-Arbeitsmappe und den VBA-Editor mit Alt+F11
  • Fügen Sie den Code irgendwo ein und führen Sie ihn mit aus F5 im Editor

Verwendete Ressourcen


Lösung # 2

Benutzen Grafik-Exporteur (Excel-Add-In)

Mit diesem Add-In können Sie Bilder, Formen, Diagramme und mehr in Bilddateien exportieren.

enter image description here

64-Bit-Problem

Sogar die neue Version für Office 2007 ist für 32-Bit-Systeme kompiliert. Es wird nicht auf einem 64-Bit-Windows ausgeführt, es sei denn, Sie beheben den Code wie in erklärt Paketüberfluss.
Ich habe diese kleinen Korrekturen für dich gemacht. Laden Sie die 64-Bit-Version herunter Hier.


4
2017-07-26 20:32



Dies ist bei weitem die am besten organisierte und hilfreichste Antwort, die ich jemals erhalten habe. Ich habe beide Methoden ausprobiert und beide funktionieren perfekt. Allerdings gibt es eine Sache, die ich vergessen habe zu spezifizieren, ich habe ungefähr 5500 Bilder in diesem Excel-Blatt, also nahm die erste Lösung (VB-Skript) mehr Zeit und CPU-Auslastung ein, aber die zweite funktionierte einwandfrei. Nochmals vielen Dank dafür, dass Sie sich die Zeit genommen haben, meine Frage nicht nur zu beantworten, sondern sie auch gut organisiert und leicht verständlich zu machen. - TDsouza
Äh, ich bin neugierig. Kann ich Guck mal in dieser Excel-Datei mit 5500, also kann ich versuchen, das Skript zu beschleunigen? Natürlich nur, wenn Ihre Arbeitsmappe keine sensiblen persönlichen oder geschäftlichen Daten enthält. - nixda
Oh, Es tut mir wirklich leid, aber das Excel-Blatt enthält einige sensible Daten. Außerdem gehören mir die Daten nicht, sondern mein Kunde. Ich werde immer noch versuchen, ob ich etwas ausarbeiten kann. :) - TDsouza


Laden Sie OpenOffice oder besser LibreOffice herunter und installieren Sie es. Sie können die Installation-auf-einem-Stick-Version verwenden, wenn Sie sich nicht mit Ihrem System anlegen möchten. Öffnen Sie das Dokument in Calc. Speichere es als Ods. Öffnen Sie den Windows Explorer. Ändern Sie die Erweiterung .ods in .zip. Entpacken Sie dann die Datei. Es gibt einen Bilderordner mit allen Bildern, voller Qualität, nicht skaliert, wahrscheinlich als PNG, was eine bessere Qualität als JPEG ist.

PS: Vielleicht ist meine Lösung nicht genau das, wonach Sie gefragt haben, aber für mich ist dies der einfachste Weg, alle Bilder aus einem MS Office Dokument zu holen. Es funktioniert auch für Word, wahrscheinlich auch Powerpoint.


0
2017-07-26 08:29



Oder Sie können die gesamte OO / LO-Problemumgehung überspringen und dasselbe mit einer xlsx-Datei tun, der Ansatz ist der gleiche. Benennen Sie in .zip um, extrahieren Sie die resultierende Struktur für die Bilddateien. Sie können zwei Dateien pro Bild dort finden, eins ist volle Res. - TheUser1024