2016-05-05 10 views
1

Excelエクスポートルーチンをxlwtからopenpyxlに移行しています。私が実際に料理したものを実際に保存するまで、すべてがホンキードリーです。ガベージコレクションはopenpyxlのフードの下で始まり、5または6(測定値)や24242757(ID)のような数字が日付と見なされるため、エラーが発生します。 xlwtでは、これらの値は日付ではなく数字であることをライブラリに示すコードはありませんでした。 (以前は複数のプラットフォームでExcelをエクスポートしていましたが、Excelの日付は実際には整数(OADate)です)。openpyxlは数値を日付として扱います。結果:OverflowError:日付値が範囲外です

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

は(1.6.1)非常に古いだったプロジェクトでopenpyxlのバージョンをオンにします。 APIを十分に変更して(例えばスタイル)、私はそれに取り組む必要があります。私は新しいバージョン(2.3.5)が円滑になることを期待しています。


アップデート2

正常にエクスポートXLSX。

+0

(Excelのガベージコレクション?なぜですか?) –

答えて

2

openpyxlの古いバージョンを使用しているようです。ガベージコレクションは、空のセルを削除するメモリを解放するためにそこにあったが、いくつかのバージョンでは使用されていない。

Excelは、書式設定を使用するだけで、日付と数値を区別します。 openpyxlは、ファイルを読むときにこの情報に依存するか、PythonからExcelに変換するときにこの情報を使用します。それ以外の場合は数字です。しかし、古いバージョンの中には、デフォルトで型推論が含まれているものもあります。特に、フォーマットされた数字に似ているかどうかを確認する文字列があると、 '2016-05-05'のように見えます。繰り返しますが、これはしばらくの間そうではありませんでした。

openpyxlをアップグレードすることをお勧めします。問題が解決しない場合は、サンプルコードとファイルでバグレポートを提出してください。

+0

ええと、私はバージョン1.6.1を使用しています(3年以上後)。 –

関連する問題