4

Excel からグラフを Python の画像ファイル (JPG または ING) としてエクスポートしようとしています。私はWIN32comを見ています。これが私が今まで持っているものです。

import win32com.client as win32
excel = win32.gencache.EnsureDispatch("Excel.Application")
wb = excel.Workbooks.Open("<WORKSHEET NAME>")
r = wb.Sheets("<SHEET NAME>").Range("A1:J50") 
# Here A1:J50 is the area over which cart is
r.CopyPicture()

これは私が立ち往生しているところです。選択した範囲をファイルにコピーする必要があります。ドキュメントへのヘルプやポインタは、私を大いに助けてくれます。

次の VBA スクリプトに基づいて上記のコードをモデル化しました。

Sub Export_Range_Images()
    ' =========================================
    ' Code to save selected Excel Range as Image
    ' =========================================
    Dim oRange As Range
    Dim oCht As Chart
    Dim oImg As Picture

    Set oRange = Range("A1:B2")
    Set oCht = Charts.Add
    oRange.CopyPicture xlScreen, xlPicture
    oCht.Paste
    oCht.Export FileName:="C:\temp\SavedRange.jpg", Filtername:="JPG"
End Sub

コード スニペット : http://vbadud.blogspot.com/2010/06/how-to-save-excel-range-as-image-using.html

4

4 に答える 4

6

これは古い質問であることは承知していますが、正しい軌道に乗せるのに役立ったので、ワークシート内のすべてのグラフを検索して .png としてエクスポートする完成したスクリプトを共有するために戻ってきました。上記のスクリプトは機能しますが、ワークシート内の範囲をコピーするだけなので、グラフが正確にその場所にあることに依存しています。

    import win32com.client as win32
    from win32com.client import Dispatch
    import os

    xlApp = Dispatch('Excel.Application')

    workbook = xlApp.Workbooks.Open("Book1.xls")
    xlApp.Sheets("Sheet1").Select()

    xlSheet1 = xlApp.Sheets(1)

    #WARNING: The following line will cause the script to discard any unsaved changes in your workbook
    #Ensure to save any work before running script
    xlApp.DisplayAlerts = False

    i = 0
    for chart in xlSheet1.ChartObjects():
        print chart.Name

        chart.CopyPicture()
        #Create new temporary sheet
        xlApp.ActiveWorkbook.Sheets.Add(After=xlApp.ActiveWorkbook.Sheets(3)).Name="temp_sheet" + str(i)
        temp_sheet = xlApp.ActiveSheet

        #Add chart object to new sheet.
        cht = xlApp.ActiveSheet.ChartObjects().Add(0,0,800, 600)
        #Paste copied chart into new object
        cht.Chart.Paste()
        #Export image
        cht.Chart.Export("chart" + str(i) + ".png")

        #This line is not entirely neccessary since script currently exits without saving
        temp_sheet.Delete()
        i = i+1

    xlApp.ActiveWorkbook.Close()
    #Restore default behaviour
    xlApp.DisplayAlerts = True
于 2014-08-12T10:20:04.810 に答える
6

これを機能させるには、いくつかの VBA の例を調べる必要がありました。私は自分自身の質問に答えるのが嫌いですが、必要な人のためにここに残しておきます。

    import win32com.client as win32
    wb = excel.Workbooks.Open(excel_file)
    selection = "A1:J30" 
    xl_range = wb.Sheets(<sheet_name>).Range(selection)
    excel.ActiveWorkbook.Sheets.Add(                  After=excel.ActiveWorkbook.Sheets(3)).Name="image_sheet"
    cht = excel.ActiveSheet.ChartObjects().Add(0,0,
                                            xl_range.Width, xl_range.Height)
    xl_range.CopyPicture()
    # add the chart to new sheet
    cht.Chart.Paste()
    # Export the sheet with the chart to a new file
    cht.Chart.Export(<image_filename>)
    # Delete the sheet
    cht.Delete()
    excel.ActiveSheet.Delete()
    # Close the book
    excel.ActiveWorkbook.Close()
于 2012-06-22T20:04:48.563 に答える