2017-07-18 52 views
1

私はforループを使って、openpyxlを使用してグラフを簡単に追加できるように、チャートの名前と位置のリストを反復しようとしています。これまで私が試したことがあります。Forループfor Openpyxlグラフの位置

from openpyxl import Workbook 
from openpyxl.chart import BarChart, Reference, Series 

def trysomething(): 

    letterlist=['B', 'J', 'R', 'Z'] 
    numlist=[22, 38, 54, 70] 
    position=[] 
    for k in letterlist: 
     for l in numlist: 
      pos = k+str(l) 
      position.append(pos) 

    chartlist=['chart'] 
    chartnum=[] 
    for j in range(1,6): 
     chartnum.append(j) 

    cha=[] 
    for h in chartlist: 
     for s in chartnum: 
      ch=h+str(s) 
      cha.append(ch) 

    wb = Workbook() 
    ws = wb.active 
    for i in range(10): 
     ws.append([i]) 

    values1 = Reference(ws, min_col=1, min_row=1, max_col=1, max_row=10) 
    chart1 = BarChart() 
    chart1.add_data(values1) 

    values2 = Reference(ws, min_col=1, min_row=1, max_col=1, max_row=10) 
    chart2 = BarChart() 
    chart2.add_data(values2) 

    values3 = Reference(ws, min_col=1, min_row=1, max_col=1, max_row=10) 
    chart3 = BarChart() 
    chart3.add_data(values3) 

    values4 = Reference(ws, min_col=1, min_row=1, max_col=1, max_row=10) 
    chart4 = BarChart() 
    chart4.add_data(values4) 

    values5 = Reference(ws, min_col=1, min_row=1, max_col=1, max_row=10) 
    chart5 = BarChart() 
    chart5.add_data(values5) 

    for a, b in zip(iter(cha), iter(position)): 
     print(a,b) 
     ws.add_chart(str(a), str(b)) 

    wb.save("SampleChart.xlsx") 

trysomething() 

I(a、b)は、それが、正しいチャート位置と正しいチャートを出力するが、私はチャートを追加するために動作しない印刷します。

ご協力いただきましてありがとうございます。

答えて

1

Workbook().active.add_chart()は、Chartオブジェクトとstringセル位置をとります。値(グラフ、チャート位置)を印刷するとき、あなたはChart<class 'openpyxl.chart.bar_chart.BarChart'>'string'のインスタンスを参照するために期待するべきであるが、代わりにあなたはabを参照してくださいあなたのコードが.add_chart()に2つのstringオブジェクトを渡しているので、両方の<str>(文字列)オブジェクトであります、no Chart

あなたはchart_listを作成し、それを反復処理するような何かをしたいと思う:

charts_list = [chart1, chart2, chart3, chart4, chart5] 

for a, b in zip(iter(charts_list), iter(position)): 
    # print(type(a)) # <class 'openpyxl.chart.bar_chart.BarChart'> 
    # print(type(b)) # <type 'str'> 
    ws.add_chart(a, b) 

作成されたExcelファイルを表示すると5つのチャートで以下のようなもののようになります。

これが役に立ちます。

enter image description here

+0

ありがとうございます! –