Excel COM APIを理解するための最初のステップは、実行したいことを実行するマクロを記録し、それを検査することです。
凡例を削除してグラフのサイズを変更するマクロを記録しました。結果のVBAは次のとおりです。
Sub Macro3()
'
' Macro3 Macro
'
'
ActiveChart.Legend.Select
Selection.Delete
ActiveSheet.ChartObjects("Chart 1").Activate
End Sub
残念ながら、グラフのサイズ変更は記録されませんでしたが、凡例の削除は記録されました。Pythonに変換されたVBAは次のとおりです。
chart.Legend.Delete()
幸いなことに、GoogleはVBAでチャートのサイズや位置を変更するにはどうすればよいですか?Pythonに翻訳:
chart.Parent.Height = new_height
chart.Parent.Width = new_width
chart.Parent.Top = v_position
chart.Parent.Left = h_position
編集:これは、Excel2003でこれらすべてを実行する短いスクリプトです。
import win32com.client
import re
xl = win32com.client.Dispatch('Excel.Application')
xl.Visible=True
wb = xl.Workbooks.Add()
ws = wb.Sheets(1)
values = [['a','b','c'],
[ 1, 2, 3 ],
[ 4, 5, 6 ]]
for nrow, row in enumerate(values):
for ncol, item in enumerate(row):
xl.Cells(nrow+1, ncol+1).Value = item
xl.Range("A1:C3").Select()
chart = xl.Charts.Add()
# chart.Legend.Delete only works while it's a chart sheet.
# so get this done before changing the chart location!
chart.Legend.Delete()
# Excel changes the name of the chart when its location is changed.
# The new name inserts a space between letters and numbers.
# 'Chart1' becomes 'Chart 1'
new_chart_name = re.sub(r'(\D)(\d)', r'\1 \2', chart.Name)
chart.Location(2, ws.Name)
# After changing the location the reference to chart is invalid.
# We grab the new chart reference from the Shapes collection using the new name.
# If only one chart is on sheet you can also do: chart = ws.Shapes(1)
chart = ws.Shapes(new_chart_name)
chart.Top = 1
chart.Left = 1
chart.Width = 500
chart.Height = 400