我正在編寫一個程序,使用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()
系列出錯?
看我的編輯:這只是給了我一個很大的錯誤,當它不應該是'str'的時候。 – spelchekr 2015-04-05 03:25:23
@spelchekr您需要在帖子中添加更多代碼才能使其理解並獲得進一步的幫助。請參閱http://stackoverflow.com/help/mcve – 2015-04-05 03:28:04