2015-10-07 182 views
0

我有以下數據列表:創建動態表變量

month = [ "Jan", "Feb", "Mar", "Apr" ] 

每個月的數據存儲在JSON,如:

[{"Master" : [ 
     { 
      "month" : "Jan", 
      "Expense" : "50", 
      "Income" : "100", 
      "Emp" : "1" 
     }, 
     { 
      "month" : "Jan", 
      "Expense" : "500", 
      "Income" : "1000", 
      "Emp" : "2" 
     }, 
     { 
      "month" : "Feb", 
      "Expense" : "50", 
      "Income" : "100", 
      "Emp" : "1" 
     }, 
     { 
      "month" : "Feb", 
      "Expense" : "500", 
      "Income" : "1000", 
      "Emp" : "2" 
     }, 
     { 
      "month" : "Mar", 
      "Expense" : "50", 
      "Income" : "100", 
      "Emp" : "2" 
     }, 
     { 
      "month" : "Apr", 
      "Expense" : "50", 
      "Income" : "100", 
      "Emp" : "1" 
     } 
    ] 
}] 

取決於month的價值,我需要寫所有使用for loop來分隔名稱爲「Jan」,「Feb」,「Mar」,「Apr」等的工作表的每月數據內容,如下所示:

for i in range(len(month)): 
    worksheet[i] = workbook.add_worksheet(month[i]) 

列表month中的內容可能會更改,因此需要動態變量分配。

這可能嗎?

+1

是的,這應該是可能的。爲什麼不嘗試,在問之前? –

+0

我在'workbook.close()'上遇到'SyntaxError:invalid Syntax'錯誤。 – Jagath

+2

然後你應該在問題中添加你使用的代碼,你得到的錯誤。 –

回答

2

以下應該做你正在尋找的東西。你可以配置哪些列和月是必需的:

import xlsxwriter 
import itertools 

data = [{"Master" : [ 
     { 
      "month" : "Jan", 
      "Expense" : "50", 
      "Income" : "100", 
      "Emp" : "1" 
     }, 
     { 
      "month" : "Jan", 
      "Expense" : "500", 
      "Income" : "1000", 
      "Emp" : "2" 
     }, 
     { 
      "month" : "Feb", 
      "Expense" : "50", 
      "Income" : "100", 
      "Emp" : "1" 
     }, 
     { 
      "month" : "Feb", 
      "Expense" : "500", 
      "Income" : "1000", 
      "Emp" : "2" 
     }, 
     { 
      "month" : "Mar", 
      "Expense" : "50", 
      "Income" : "100", 
      "Emp" : "2" 
     }, 
     { 
      "month" : "Apr", 
      "Expense" : "50", 
      "Income" : "100", 
      "Emp" : "1" 
     } 
    ] 
}] 


workbook = xlsxwriter.Workbook('output.xlsx') 

# List of required months 
months = [ "Jan", "Feb", "Apr" ]  

# List of required columns and required order 
columns = ['month', 'Expense', 'Income', 'Emp'] 

for workbook_month in months: 
    for data_month, g in itertools.groupby(data[0]['Master'], key=lambda x: x['month']): 
     if workbook_month == data_month: 
      worksheet = workbook.add_worksheet(workbook_month) 
      worksheet.write_row(0, 0, columns) 

      for row, entry in enumerate(g, start=1): 
       worksheet.write_row(row, 0, [entry[col] for col in columns]) 

workbook.close() 

給你下面的輸出,在這裏,我已經錯過了Mar數據:

enter image description here

+0

謝謝馬丁。這有幫助。 – Jagath