Hassan
Hassan

Reputation: 13

Convert charts in Word document to images

I have a 300 page Word document and every page has a chart and text.

When I make, place or import this document into InDesign these charts do not appear or place in the template!

Is there way or macro to convert all of the charts into images?

I found this macro. It makes a copy of any chart but this copy is a very small picture.

Sub EmbedAllCharts()
    Dim ILS As InlineShape
    Dim Shp As Shape

    For Each ILS In ActiveDocument.InlineShapes
        If ILS.Type = wdInlineShapeChart Then
            ILS.Chart.Export Environ$("temp") & "\chart" & ".png", "PNG"
            ILS.Select
            Selection.InlineShapes.AddPicture FileName:=Environ$("temp") & "\chart" & ".png", _
                LinkToFile:=False, SaveWithDocument:=True
        End If
    Next ILS

    For Each Shp In ActiveDocument.Shapes
        If Shp.Type = msoChart Then
            Shp.Chart.Export Environ$("temp") & "\chart" & ".png", "PNG"
            Shp.Select
            Selection.InlineShapes.AddPicture FileName:=Environ$("temp") & "\chart" & ".png", _
                LinkToFile:=False, SaveWithDocument:=True
            Shp.Delete
        End If
    Next Shp
End Sub

enter image description here
enter image description here

Upvotes: 1

Views: 430

Answers (1)

Oscar  Sun
Oscar Sun

Reputation: 1479

I don't have InDesign now, so I can't test that part, but I've known that before using the Export method, you can zoom in on the Chart and then export it to get a larger, clearer image. Something like this:

Sub EportAllChartsInLargeSize()
    Dim ILS As InlineShape
    Dim Shp As Shape
    
    Dim i As Long, ur As Word.UndoRecord

    Set ur = Word.Application.UndoRecord
    ur.StartCustomRecord "EportAllChartsInLargeSize"
    
    For Each ILS In ActiveDocument.InlineShapes
        If ILS.Type = wdInlineShapeChart Then
        
            Rem Before using the Export method, you can zoom in on the Chart and then export it to get a larger, clearer image.
            ZoomInlineShape ILS, 2
            
            ILS.Chart.Export Environ$("temp") & "\chart" & i & ".png", "PNG"
            
            'ILS.Range.Document.Undo 'restore the size
            
'            ILS.Select
'            Selection.InlineShapes.AddPicture FileName:=Environ$("temp") & "\chart" & ".png", _
                LinkToFile:=False, SaveWithDocument:=True
                
            i = i + 1
        End If
    Next ILS

    For Each Shp In ActiveDocument.Shapes
        If Shp.Type = msoChart Then
            Rem Before using the Export method, you can zoom in on the Chart and then export it to get a larger, clearer image.
            ZoomShape Shp, 2
            
            Shp.Chart.Export Environ$("temp") & "\chart" & i & ".png", "PNG"
            
            'Shp.Anchor.Document.Undo 'restore the size
            
'            Shp.Select
'            Selection.InlineShapes.AddPicture FileName:=Environ$("temp") & "\chart" & ".png", _
'                LinkToFile:=False, SaveWithDocument:=True
'            Shp.Delete

            i = i + 1
        End If
    Next Shp
    
    ur.EndCustomRecord
    ActiveDocument.Undo 'restore the size
    
End Sub
Sub ZoomInlineShape(ByRef ILS As InlineShape, percentage As Single)
    With ILS
        .LockAspectRatio = msoTrue
        .Width = .Width * percentage
'        .Height = .Height * percentage
    End With
End Sub
Sub ZoomShape(ByRef Shp As Shape, percentage As Single)
    With Shp
        .LockAspectRatio = msoTrue
        .Width = .Width * percentage
'        .Height = .Height * percentage
    End With
End Sub
Sub ExportChart()
    Dim ILS As InlineShape
    Dim objChart As Chart 'Object
    Dim strFilePath As String
    Dim strFileName As String
    Dim objInDesign As Object 'InDesign.Application
    Dim objDoc As Object 'InDesign.Document
    
    Rem Before using the Export method, you can zoom in on the Chart and then export it to get a larger, clearer image.
    Set ILS = ActiveDocument.InlineShapes(2) ' This is just for my test, you can adjust to yours
    ZoomInlineShape ILS, 2
    
    ' Get the active chart object in Word
    Set objChart = ActiveDocument.InlineShapes(2).Chart

    ' Get the file path and name for the exported chart
    strFilePath = VBA.Environ("userprofile") + "\Documents\" '"C:\\Temp\\"
    strFileName = "chartTest.png"

    
    ' Export the chart to the specified file location
    objChart.Export FileName:=strFilePath & strFileName, FilterName:="PNG"

    ILS.Range.Document.Undo 'restore the size
    
    Stop
    
    Rem This code below is the answer of YouChat and I don't have InDesign so I can't test. Sorry. Maybe you can try
    ' Open the InDesign application
    Set objInDesign = CreateObject("InDesign.Application")

    ' Open the InDesign document where you want to import the chart
    Set objDoc = objInDesign.Open("C:\\Users\\UserName\\Documents\\MyDocument.indd")

    ' Insert the exported chart into the InDesign document
    objDoc.Pages(1).Place strFilePath & strFileName

    ' Save and close the InDesign document
    objDoc.Save
    objDoc.Close

    ' Clean up
    Set objChart = Nothing
    Set objInDesign = Nothing
    Set objDoc = Nothing
End Sub

Upvotes: 1

Related Questions