Excel PythonXLSXWriter模块:在多个工作表上迭代相同的格式和条件集

Excel PythonXLSXWriter模块:在多个工作表上迭代相同的格式和条件集,excel,python-2.7,csv,xlsxwriter,Excel,Python 2.7,Csv,Xlsxwriter,使用xlsxwriter模块,我创建了一个Python脚本,可以将csv文件内容复制到excel工作表中。然后根据第一个工作表创建第二个工作表,其中包含查找、计算、条件格式化(模板)。没问题。 我的问题始于我尝试循环代码时,即将3个csv文件内容复制到1个工作簿中的3个工作表中,然后再创建3个应用相同模板但基于不同工作表查找的工作表。以下是“将csv复制到excel工作表”代码片段: workbook = Workbook(csvFile[:-4] + '.xlsx', {'strings_to

使用xlsxwriter模块,我创建了一个Python脚本,可以将csv文件内容复制到excel工作表中。然后根据第一个工作表创建第二个工作表,其中包含查找、计算、条件格式化(模板)。没问题。

我的问题始于我尝试循环代码时,即将3个csv文件内容复制到1个工作簿中的3个工作表中,然后再创建3个应用相同模板但基于不同工作表查找的工作表。以下是“将csv复制到excel工作表”代码片段:

workbook = Workbook(csvFile[:-4] + '.xlsx', {'strings_to_numbers': True})
align = workbook.add_format({'align':'center','text_wrap':True})
for csvfile in (glob.glob(filepath + '\\*.csv')):                
    worksheet = workbook.add_worksheet(header[2])
    with open(csvfile, 'rb') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, col in enumerate(row):
                worksheet.set_column('A:A',65)
                worksheet.set_column('B:P',12)
                worksheet.write(r, c, col, align)
我想这样做:

workbook = Workbook(csvFile[:-4] + '.xlsx', {'strings_to_numbers': True})
align = workbook.add_format({'align':'center','text_wrap':True})
for i, csvfile in (glob.glob(filepath + '\\*.csv')):   
    worksheet[i] = workbook.add_worksheet(header[i])             
    with open(csvfile, 'rb') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, col in enumerate(row):
                worksheet[i].set_column('A:A',65)
                worksheet[i].set_column('B:P',12)
                worksheet[i].write(r, c, col, align)
xlsxwriter模块不允许我这样做。上述代码将引发以下错误:

File "C:\workspace\automagic.py", line 103, in create_xls
worksheet[i] = workbook.add_worksheet(header[i]) 
NameError: global name 'worksheet' is not defined
我不想复制和粘贴相同的代码,而只是更改了工作表名称

更新:考虑到jmcnamara的评论,我能够修改我的代码,如下所示:

worksheet = ['worksheet0','worksheet1','worksheet2']
workbook = Workbook(csvFile[:-4] + '.xlsx', {'strings_to_numbers': True})
align = workbook.add_format({'align':'center','text_wrap':True})    

for i, csvfile in enumerate(glob.glob(filepath + '\\*.csv')):  
    testtype = csvfile.split('.')[3].split('_')[1]
    worksheet[i] = workbook.add_worksheet(testtype)
    with open(csvfile, 'rb') as f:
            reader = csv.reader(f)
            for r, row in enumerate(reader):
                for c, col in enumerate(row):
                    worksheet[i].set_column('A:A',65)
                    worksheet[i].set_column('B:P',12)
                    worksheet[i].write(r, c, col, align)  
xlsxwriter模块不允许我这样做。上面的代码将抛出以下错误

这不是XlsxWriter错误,而是一个一般的python错误。您会从以下内容中得到相同的错误:

$ cat error_test.py

def some_func():
    i = 1
    worksheet[i] = 123

some_func()


$ python error_test.py
Traceback (most recent call last):
  File "error_test.py", line 7, in <module>
    some_func()
  File "error_test.py", line 5, in some_func
    worksheet[i] = 123
NameError: global name 'worksheet' is not defined
$cat error\u test.py
定义某些函数():
i=1
工作表[i]=123
some_func()
$python error\u test.py
回溯(最近一次呼叫最后一次):
文件“error_test.py”,第7行,在
some_func()
文件“error_test.py”,第5行,在某些函数中
工作表[i]=123
NameError:未定义全局名称“工作表”

您需要在某个地方声明变量
工作表
,可能还需要使用
工作表.append()

模块开发人员的回答有帮助。:)