4

我正在編寫一個程序,使用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()系列出錯?

回答

6

在我的代碼中,我試圖引用一個不存在的格式。當我打電話給excel.close()時,這似乎是它實際上寫入所有內容的時候,所以如果格式無效,它會在那裏引發錯誤。

1

我想你忘記關閉文件 - 一旦你完成數據寫入文件,您將需要關閉使用

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

3

我得到了同樣的問題,併成功地解決它,如果額外的參數設置爲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文件

1

上面的代碼是什麼導致了excel。關閉()線錯誤?

它在excel.close()上崩潰,因爲它是在打包程序被調用時。錯誤來自sheet.write調用中的第四個參數:eval未返回xlsxwriter.Format對象,但str對象未收到_get_xf_index方法,因此它們會引發異常。

您可能可以通過使用eval來改善代碼,這幾乎總是一種不好的做法,可以將您的格式映射到字典和/或列表中,或者如果格式非常複雜,則可以創建一個返回格式的函數。