Cómo guardar imágenes duplicadas en Excel en diferentes archivos JPEG

3

Tengo una hoja de Excel con imágenes que se almacenan como objetos en una columna y nombres de productos en otra. Estaba tratando de extraer todas las imágenes a archivos JPEG. Pude lograr esto guardando la hoja de Excel como un documento HTML.

Esto me dio los siguientes archivos

  • Un archivo HTML
  • Una carpeta con todas las imágenes junto con un archivo XML filelist.xmlcon una lista de todos los archivos de imagen

Ahora necesito crear una nueva hoja de Excel que tenga los nombres de los productos en una columna y los nombres de los archivos de imágenes en la otra. Pude lograr esto usando el archivo XML creado filelist.xml.


Sin embargo, esto ha introducido un nuevo problema

Mi hoja de Excel original tenía ciertas variantes de productos, por ejemplo (Producto1 blanco, Producto1 verde, Producto1 rojo, Producto1 azul)

Si bien los productos son un poco diferentes en color, el objeto de imagen asociado se repitió. Básicamente, los cuatro tenían la misma imagen correspondiente. Ahora, al guardar este archivo como HTML, encontré solo un archivo de imagen en lugar de cuatro.

Además, el archivo XML solo tenía una entrada en lugar de cuatro, por lo que la nueva hoja de Excel que estoy creando a partir del XML también tiene una entrada en lugar de cuatro.

Aunque el mismo objeto se usa cuatro veces para productos similares, parecen estar almacenados con diferentes nombres. (Al hacer clic en el primero, se mostró "picture1", el segundo "picture2", etc.). Esto me ha dado la esperanza de que tal vez haya una manera de guardar imágenes individualmente, por lo que recibo cuatro archivos JPEG en lugar de uno.

TDsouza
fuente

Respuestas:

4

(ambas soluciones son superiores al método de extracción porque también se exportan imágenes redundantes)

Solución n. ° 1

Aquí está mi macro VBA para exportar todas las imágenes de un libro de trabajo.
Las imágenes se guardarán en una carpeta de su elección y el nombre del objeto interno de Excel se utilizará como nombre de archivo de imagen. El código está comentado y no es tan difícil.

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

Cómo utilizar

  • Abra su libro de Excel y el editor de VBA con Alt+F11
  • Pegue el código en algún lugar y ejecútelo F5en el editor

Recursos utilizados


Solución n. ° 2

Usar exportador de gráficos (complemento de Excel)

Este complemento le permitirá exportar imágenes, formas, gráficos y más a archivos de imagen.

ingrese la descripción de la imagen aquí

Problema de 64 bits

Incluso la nueva versión para Office 2007 está compilada para sistemas de 32 bits. No se ejecutará en Windows de 64 bits a menos que arregle el código como se explica en Stackoverflow .
He hecho esas pequeñas correcciones por ti. Descargue la versión de 64 bits aquí .

nixda
fuente
Esta es, con mucho, la respuesta más organizada y útil que he recibido. Probé ambos métodos y ambos funcionan perfectamente. Sin embargo, hay una cosa que olvidé especificar, tengo alrededor de 5500 imágenes en esa hoja de Excel, por lo que la primera solución (secuencia de comandos VB) terminó tomando más tiempo y el uso de la CPU, sin embargo, la segunda funcionó perfectamente bien. Gracias una vez más por tomarse el tiempo no solo para responder mi pregunta, sino también para hacerla bien organizada y fácil de entender.
TDsouza
Tengo curiosidad. ¿Puedo echar un vistazo a ese archivo de Excel con 5500 para intentar acelerar el script? Por supuesto solo, si su libro de trabajo no contiene datos personales o comerciales confidenciales.
nixda
Oh, lo siento mucho, pero la hoja de Excel contiene algunos datos confidenciales. Además los datos no me pertenecen a mí, sino a mi cliente. Todavía intentaré ver si puedo resolver algo. :)
TDsouza
0

Descargue OpenOffice o mejor LibreOffice e instálelo. Puede usar la versión de instalación en un palo si no desea meterse con su sistema. Abra el documento en Calc. Guárdelo como ods. Abre el Explorador de Windows. Cambie la extensión .ods a .zip. Luego descomprima el archivo. Dentro hay una carpeta de imágenes con todas las imágenes, calidad total, sin escala, probablemente como PNG, que es de mejor calidad que JPEG.

PD: tal vez mi solución no es exactamente lo que pediste, pero para mí esta es la forma más fácil de sacar todas las imágenes de un documento de MS Office. También funciona para Word, probablemente también para Powerpoint.

SPRBRN
fuente
44
O puede omitir toda la solución OO / LO y hacer lo mismo con un archivo xlsx, el enfoque es el mismo. Cambie el nombre a .zip, extraiga, explore la estructura resultante para los archivos de imagen. Puede encontrar dos archivos por imagen allí, uno es de resolución completa.
TheUser1024