xlsxwriter 模块不会 open/close Excel 正确归档
xlsxwriter module won't open/close Excel file correctly
我正在编写一个程序,使用 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]))
如果我用一个
替换所有花哨的 if...else
东西
sheet.write(r + r_offset, c + c_offset, cell)
它没有给我错误,而且似乎工作正常。
这没有提供我需要的功能,因为某些列需要是其数字根据行而变化的公式。上面代码中的什么导致 excel.close()
行出错?
我认为您忘记了关闭文件 - 将数据写入文件后,您需要使用
关闭文件处理程序
excel.close()
中所述
在我的代码中,我试图引用一种不存在的格式。当我调用 excel.close()
时,这似乎是它实际写入所有内容的时间,因此如果格式无效,它会在那里抛出错误。
我遇到了同样的问题并成功解决了
AttributeError: type object 'str' has no attribute '_get_xf_index'
如果将额外参数设置为 sheet.write()
,则会出现此错误消息
所以请使用 sheet.write(row, col, "Some_text"+variable)
而不是 sheet.write(row, col, "Some_text", variable)
...和 excel.close()
如果脚本完成使用 excel 文件
What in the above code is causing the excel.close() line to bug out?
它在 excel.close()
崩溃,因为它是调用打包程序的时间。错误来自 sheet.write
调用中的第四个参数:eval
没有返回 xlsxwriter.Format
个对象,而是返回 str
个对象,这些对象没有 _get_xf_index
方法,因此他们抛出异常。
您可以改进您的代码,避免使用 eval
,这几乎总是一种不好的做法,将您的格式映射到字典 and/or 列表中,或者,如果格式真的很复杂,创建returns 格式的函数。
我正在编写一个程序,使用 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.
编辑:
我在最后添加了一个 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]))
如果我用一个
替换所有花哨的if...else
东西
sheet.write(r + r_offset, c + c_offset, cell)
它没有给我错误,而且似乎工作正常。
这没有提供我需要的功能,因为某些列需要是其数字根据行而变化的公式。上面代码中的什么导致 excel.close()
行出错?
我认为您忘记了关闭文件 - 将数据写入文件后,您需要使用
关闭文件处理程序excel.close()
中所述
在我的代码中,我试图引用一种不存在的格式。当我调用 excel.close()
时,这似乎是它实际写入所有内容的时间,因此如果格式无效,它会在那里抛出错误。
我遇到了同样的问题并成功解决了
AttributeError: type object 'str' has no attribute '_get_xf_index'
如果将额外参数设置为 sheet.write()
,则会出现此错误消息
所以请使用 sheet.write(row, col, "Some_text"+variable)
sheet.write(row, col, "Some_text", variable)
...和 excel.close()
如果脚本完成使用 excel 文件
What in the above code is causing the excel.close() line to bug out?
它在 excel.close()
崩溃,因为它是调用打包程序的时间。错误来自 sheet.write
调用中的第四个参数:eval
没有返回 xlsxwriter.Format
个对象,而是返回 str
个对象,这些对象没有 _get_xf_index
方法,因此他们抛出异常。
您可以改进您的代码,避免使用 eval
,这几乎总是一种不好的做法,将您的格式映射到字典 and/or 列表中,或者,如果格式真的很复杂,创建returns 格式的函数。