创建动态工作表变量
Create dynamic worksheet variable
我有一个包含以下数据的列表:
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
的值,我需要将每个月数据的所有内容写到名称为"Jan"、"Feb"、"Mar"的单独的工作表中, "Apr" 等使用 for loop
,类似于:
for i in range(len(month)):
worksheet[i] = workbook.add_worksheet(month[i])
列表 month
中的内容可能会发生变化,因此需要进行动态变量分配。
这可能吗?
以下内容应该符合您的要求。您可以配置需要哪些列和月份:
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
数据:
我有一个包含以下数据的列表:
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
的值,我需要将每个月数据的所有内容写到名称为"Jan"、"Feb"、"Mar"的单独的工作表中, "Apr" 等使用 for loop
,类似于:
for i in range(len(month)):
worksheet[i] = workbook.add_worksheet(month[i])
列表 month
中的内容可能会发生变化,因此需要进行动态变量分配。
这可能吗?
以下内容应该符合您的要求。您可以配置需要哪些列和月份:
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
数据: