我將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。
(垃圾收集在一個excel庫?爲什麼?) –