2017-07-18 34 views
1

我想做一個for循環遍歷圖表名稱和位置的列表,以便更容易地使用openpyxl添加圖表到excel。這是我到目前爲止所嘗試過的。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() 

當我打印(a,b)時,它輸出正確的圖表位置,但是,我不工作添加圖表。

任何幫助表示讚賞!

回答

1

Workbook().active.add_chart()需要一個Chart對象和一個string單元格位置。當打印值(圖表,圖表的位置),你應該會看到的Chart<class 'openpyxl.chart.bar_chart.BarChart'>'string'一個實例,而是你看到ab都是<str>(串)對象,所以你的代碼是傳遞兩個string對象的.add_chart() ,沒有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

非常感謝! –