xlwt根据输入创建动态数量的工作表

时间:2014-03-20 14:52:25

标签: python worksheet xlwt

如果我事先知道需要多少工作表,我知道如何创建多个工作表并写入它们。例如,如果我只有3个工作表,则此代码可以正常工作。 (我可以使用for循环来指示每个工作表的内容):

import xlwt as xlwt

workbook = xlwt.Workbook()
style = xlwt.XFStyle()

ws1 = workbook.add_sheet("Worksheet 1")
ws2 = workbook.add_sheet('Worksheet 2')
ws3 = workbook.add_sheet('Worksheet 3')

# For loop to dictate contents of each worksheet here...
worksheet = ws1
worksheet.write(1, 1, 'Welcome to Worksheet 1', style)

worksheet = ws2
worksheet.write(1, 1, 'Welcome to Worksheet 2', style)

workbook.save(r'C:\Users\...\Desktop\...\mult_worksheets.xls')

但是,我想要做的是收集数据并根据收集的数据集数量创建我可以写入的新工作表。我提前知道我需要创建和写入多少工作表。它可以是1个数据集,也可以是10个数据集。

我知道当您调用workbook.add_sheet(' Name')时会创建工作表对象。例如:

ws1 = workbook.add_sheet('Worksheet 1')

我需要工作表实例" ws1"为了写入该工作表。如何只创建我需要的工作表实例数并能够写入它们?

如果我收集了一组4个数据集,我需要创建4个工作表,其中包含工作表的名称和由数据集确定的内容。

为了澄清,假设我创建了一个数据集名称列表,如下所示:

worksheet_names = ['CA Stats', "TX Stats", "NY Stats", "FL Stats"]

这些将用作工作表的名称。

每个工作表都有自己的数据。例如:

worksheet_data = ['Welcome to CA Stats', "Welcome to TX Stats", "Welcome to NY Stats", "Welcome to FL Stats"]

感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

您正在寻找enumerate()方法:

import xlwt as xlwt
wb = xlwt.Workbook()
names = ['a', 'b', 'c', 'd']
dataset = ['100', '200', '300', '400']
for name in names:
    wb.add_sheet(name)
for n, data in enumerate(dataset):
    ws = wb.get_sheet(n)
    ws.write(1, 1, data)
    # now do more things with ws if you like

主要的是名称和数据集以相同的方式成对排序(因此' b'是表格的名称,其中包含数据' 200' )。

答案 1 :(得分:0)

您是如何获得数据集的?为什么您无法确定在检索数据集时需要多少张纸?

更新

一个例子:

dataset = [[dataset1], [dataset2], etc...]
for innerset in dataset:
    for data in innerset:
        #create worksheet
        #add data
        #close worksheet

答案 2 :(得分:0)

感谢melipone,我现在已经回答了我的问题。但是,为了澄清任何看到此内容的人,我想指出enumerate()与问题没有密切关系,也没有必要。一旦创建了这样的工作表:

worksheet_names = ['a', 'b', 'c', 'd']

for name in worksheet_names:
    wb.add_sheet(name)

可以使用您想要的任何数据以任何顺序写入任何工作表。您需要知道的是工作表的索引位置,可以使用" ws = wb.get_sheet(index_position)"来访问它。例如:

dataset = ['100', '200', '300', '400']

ws = wb.get_sheet(2)
ws.write(1, 1, dataset[2])
ws.write(2, 1, "This is something else I want to write in the third worksheet")

ws = wb.get_sheet(0)
ws.write(1, 1, "Cell 1, 1 contains data from a dict")
ws.write(2, 1, "This is something else I want to write in the first worksheet")

ws = wb.get_sheet(1)
ws.write(1, 1, "The data in this cell comes from a different dict")
ws.write(2, 1, "Write this in the second worksheet")

ws = wb.get_sheet(3)
ws.write(1, 1, "This is the 4th worksheet")