2016-05-05 86 views
1

我將Excel導出例程從xlwt遷移到openpyxl。所有的事情都是一如既往,直到我真正想要保存我製作的東西。一個垃圾回收在openpyxl的引擎蓋下啓動,它會拋出一個錯誤,因爲像5或6(測量)或24242757(id)這樣的數字看起來被認爲是日期。用xlwt我們沒有任何代碼向圖書館建議這些值是數字而不是日期。 (我之前曾在多個平臺上從事Excel導出工作,並且我知道Excel日期內的深層實際上是整數(OADate))。openpyxl將數字值視爲日期。結果:溢出錯誤:日期值超出範圍

OverflowError : date value out of range 
Traceback (most recent call last): 
    File "C:\Users\foobar\spoolerque\models.py", line 82, in run 
result = task_function(self, **kwargs) 
    File "C:\Users\foobar\ratings\views.py", line 1332, in create_analytics_report_task 
    return foobar_export(task=task, players=report_list, ev=ev, sort_by=sb) 
    File "C:\Users\foobar\ratings\views.py", line 1177, in foobar_export 
    xls_export.save(file_contents) 
    File "C:\Users\foobar\main\utils.py", line 602, in save 
    self.wb.save(io) 
    File "C:\Users\foobar\env\lib\site-packages\openpyxl\workbook.py", line 214, in save 
    save_workbook(self, filename) 
    File "C:\Users\foobar\env\lib\site-packages\openpyxl\writer\excel.py", line 150, in save_workbook 
    writer.save(filename) 
    File "C:\Users\foobar\env\lib\site-packages\openpyxl\writer\excel.py", line 133, in save 
    self.write_data(archive) 
    File "C:\Users\foobar\env\lib\site-packages\openpyxl\writer\excel.py", line 64, in write_data 
    shared_string_table = self._write_string_table(archive) 
    File "C:\Users\foobar\env\lib\site-packages\openpyxl\writer\excel.py", line 84, in _write_string_table 
    ws.garbage_collect() 
    File "C:\Users\foobar\env\lib\site-packages\openpyxl\worksheet.py", line 478, in garbage_collect 
    iteritems(self._cells) if (not cell.merged and cell.value in ('', None) and \ 
    File "C:\Users\foobar\env\lib\site-packages\openpyxl\cell.py", line 319, in _get_value 
    value = self._shared_date.from_julian(value) 
    File "C:\Users\foobar\env\lib\site-packages\openpyxl\shared\date_time.py", line 162, in from_julian 
    return EPOCH + datetime.timedelta(days=utc_days) 
OverflowError: date value out of range 

有沒有人遇到過這個問題?我沒有看到明顯的報道,所以我想我做錯了什麼?


更新1

原來openpyxl的版本中,該項目是極其古老(1.6.1)。足夠老了,以至於API需要改變的足夠(例如風格)。我期望新版本(2.3.5)平穩。


更新2

成功導出XLSX。

+0

(垃圾收集在一個excel庫?爲什麼?) –

回答

2

它看起來像你使用的是舊版本的openpyxl。垃圾收集在那裏釋放內存,刪除空單元,但尚未用於多個版本。

Excel僅通過使用格式來區分日期和數字。當讀取文件時,openpyxl也依賴這些信息,或者在從Python轉換爲Excel時使用它,否則數字就是數字。然而,一些舊版本還默認包含類型推斷,其中一些字符串將被檢查以查看它們是否類似於特定格式的數字,如'2016-05-05'。再一次,這一直不是這種情況。

我建議您升級openpyxl,如果問題仍然存在,請提供示例代碼和文件的錯誤報告。

+0

嗯,是的,我看到我們正在使用版本1.6.1,「稍微」(3年以上)。 –

相關問題