Python 创建动态工作表变量

Python 创建动态工作表变量,python,excel,xlsx,xlsxwriter,Python,Excel,Xlsx,Xlsxwriter,我有一个包含以下数据的列表: month = [ "Jan", "Feb", "Mar", "Apr" ] 每个月的数据都存储在JSON中,如: [{"Master" : [ { "month" : "Jan", "Expense" : "50", "Income" : "100", "Emp" : "1" }, { "month" :

我有一个包含以下数据的列表:

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"
        }
     ]
}]
根据
月份的值
,我需要使用
for循环
,将每个月数据的所有内容写入单独的表格,名称为“Jan”、“Feb”、“Mar”、“Apr”等,例如:

for i in range(len(month)):
    worksheet[i] = workbook.add_worksheet(month[i])
列表<代码>月份<代码>中的内容可能会更改,因此需要动态变量分配


这可能吗?

以下内容应该可以满足您的需求。您可以配置需要哪些列和月份:

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
数据:


是的,这应该是可能的。在询问之前,您为什么不试试呢?我在
工作簿上发现一个错误。close()
作为
语法错误:无效语法。然后您应该在问题中添加您正在使用的代码,您正在得到的错误。谢谢Martin。这很有帮助。