xlsxwriter模块将无法正确打开/关闭Excel文件

问题描述:

我正在编写一个程序,使用xlsxwriter模块将数据写入Excel文件。xlsxwriter模块将无法正确打开/关闭Excel文件

打开工作簿的代码是:

excel = xlsxwriter.Workbook('stock.xlsx') 

这用来工作。然后,我在节目中(即行之后waaaaay)的上下左右改变了一些东西,现在这是行不通的,这样说:

Exception ignored in: <bound method Workbook.__del__ of <xlsxwriter.workbook.Workbook object at 0x02C702B0>> 
Traceback (most recent call last): 
    File "c:\python34\lib\site-packages\xlsxwriter\workbook.py", line 147, in __del__ 
    raise Exception("Exception caught in workbook destructor. " 
Exception: Exception caught in workbook destructor. Explicit close() may be required for workbook. 

,当我忘记再次运行它之前关闭该文件有此遭遇(因为它试图写入一个在Excel中打开的文件,这将无法正常工作),但我甚至没有打开Excel并且这样做。

我该如何解决这个问题?我需要重新启动吗?

此外,我试图让一个try...except循环停止程序,如果初始化不起作用。即使只有except:,没有特定的例外,它仍然完成该程序,除非我手动杀死它。该脚本基本上打开Excel文件,花费很长时间从Internet下载数据,然后将其写入Excel文件。如果初始化不起作用,我希望它停止,因此我不必等待脚本完成(最多可能需要15分钟)。我很确定它与“Exception ignored”这个事实有关,但我并不熟悉Python中的所有错误-fu。

编辑:

我增加了一个excel.close()命令就在年底,现在不给我的第一个错误,但第二个(和更大的和可怕的)之一:

Traceback (most recent call last): 
    File "C:\Users\carte_000\Python\stock_get_rev8.py", line 161, in <module> 
    excel.close() 
    File "c:\python34\lib\site-packages\xlsxwriter\workbook.py", line 287, in close 
    self._store_workbook() 
    File "c:\python34\lib\site-packages\xlsxwriter\workbook.py", line 510, in _store_workbook 
    xml_files = packager._create_package() 
    File "c:\python34\lib\site-packages\xlsxwriter\packager.py", line 132, in _create_package 
    self._write_worksheet_files() 
    File "c:\python34\lib\site-packages\xlsxwriter\packager.py", line 189, in _write_worksheet_files 
    worksheet._assemble_xml_file() 
    File "c:\python34\lib\site-packages\xlsxwriter\worksheet.py", line 3395, in _assemble_xml_file 
    self._write_sheet_data() 
    File "c:\python34\lib\site-packages\xlsxwriter\worksheet.py", line 4802, in _write_sheet_data 
    self._write_rows() 
    File "c:\python34\lib\site-packages\xlsxwriter\worksheet.py", line 4988, in _write_rows 
    self._write_cell(row_num, col_num, col_ref) 
    File "c:\python34\lib\site-packages\xlsxwriter\worksheet.py", line 5148, in _write_cell 
    xf_index = cell.format._get_xf_index() 
AttributeError: type object 'str' has no attribute '_get_xf_index' 

编辑2:

实际写入到文件的代码的部分是这样的:

for r, row in enumerate(data): 
    for c, cell in enumerate(row): 
     if 'percent' in formats[c]: 
      sheet.write(r + r_offset, c + c_offset, cell, eval(formats[c].replace('_f', ''))) 
     elif '_f' in formats[c]: 
      sheet.write(r + r_offset, c + c_offset, cell.format(n=str(r + r_offset)), eval(formats[c].replace('_f', ''))) 
     else: 
      sheet.write(r + r_offset, c + c_offset, cell, eval(formats[c][0] + formats[c].replace('_f', '')[-1])) 

如果我有一个

sheet.write(r + r_offset, c + c_offset, cell) 

更换所有花哨if...else东西,它并没有给我的错误,似乎很好地工作。

这不提供我需要的功能,因为某些列需要是其数字基于行更改的公式。上述代码中的哪些内容导致excel.close()系列出错?

在我的代码中,我试图引用一个不存在的格式。当我打电话给excel.close()时,这似乎是它实际上写入所有内容的时候,所以如果格式无效,它会在那里引发错误。

我想你忘记关闭文件 - 一旦你完成数据写入文件,您将需要关闭使用

excel.close() 

docs here提到的文件处理程序。

+0

看我的编辑:这只是给了我一个很大的错误,当它不应该是'str'的时候。 – spelchekr 2015-04-05 03:25:23

+0

@spelchekr您需要在帖子中添加更多代码才能使其理解并获得进一步的帮助。请参阅http://stackoverflow.com/help/mcve – 2015-04-05 03:28:04

我得到了同样的问题,并成功地解决它,如果额外的参数设置为sheet.write() 所以不是sheet.write(row, col, "Some_text", variable)请使用sheet.write(row, col, "Some_text"+variable)

发生

AttributeError: type object 'str' has no attribute '_get_xf_index' 

此错误信息......和excel.close()如果脚本完成使用excel文件

上面的代码是什么导致了excel。关闭()线错误?

它在excel.close()上崩溃,因为它是在打包程序被调用时。错误来自sheet.write调用中的第四个参数:eval未返回xlsxwriter.Format对象,但str对象未收到_get_xf_index方法,因此它们会引发异常。

您可能可以通过使用eval来改善代码,这几乎总是一种不好的做法,可以将您的格式映射到字典和/或列表中,或者如果格式非常复杂,则可以创建一个返回格式的函数。