2013-05-17 157 views
5

巨大なExcelファイルを作成しましたが、openpyxlのoptimized writerが必要です。openpyxlで最適化されたライターを使用してセルの書式とスタイルを設定する

質問があります: 最適化されたライターを使用する場合、セルのスタイルとフォーマットを設定するのは可能ですか?スタイルはそれほど重要ではありません(私は列見出しを強調したいだけです)が、通貨値を含むいくつかの列には正しい数値書式が必要です。 最適化されたライターを使用しているときにws.cell()メソッドが使用できないことがわかりました。

ありがとうございました!ドキュメントから

答えて

4

XlsxWriterモジュールを見ると、optimised modeに巨大なファイルを書き込むことができます。formattingです。

from xlsxwriter.workbook import Workbook 

workbook = Workbook('file.xlsx', {'constant_memory': True}) 
worksheet = workbook.add_worksheet() 
... 
+0

このような素晴らしいモジュールをありがとう! 'optimize_write = True'と' constant_memory = True'のxlsxwriterとの間で、パフォーマンスのベンチマークopenpyxlはありますか? – alecxe

+0

PyExcelerateの[README](https://github.com/whitehat2k9/PyExcelerate/blob/master/README.md)に[PyExcelerate](https://github.com/whitehat2k9/PyExcelerate)のベンチマークがあります、XlsxWriterおよびOpenPyXL。 – jmcnamara

+0

ありがとうございます。 Pyexcelerateは速度に関して有望ですが、他には何もありません。セルの書式設定やページ設定などは不要です。将来のバージョンではxlsxwriterの方が高速になります。 – alecxe

1

引用:

これらのワークシートのみAPPEND()メソッドを持って、それは()(セルを通る()または範囲) アクセス独立した細胞に直接ことはできません。それらは は書き込み専用です。あなたはWorkbookコンストラクタにoptimized_write=Trueを渡すと

、openpyxlではなくWorksheetDumpWorksheetクラスを使用します。 DumpWorksheetクラスは、スタイリングと書式設定に関して非常に制限されています。

しかし、appendメソッドを見てください。これは、タイプをExcelに渡すデータのpythonタイプと一致します。だから、これを実行した後、結果をファイルに正しいセルの書式を参照してください。

import datetime 
from openpyxl import Workbook 

wb = Workbook(optimized_write=True) 
ws = wb.create_sheet() 

for irow in xrange(5): 
    ws.append([True, datetime.datetime.now(), 'test', 1, 1.25, '=D1+E1']) 

wb.save('output.xlsx') 

を列ヘッダのスタイル変更についていえば - 最適化されたライターを使用してそれを行うためだけの方法はありませんが。

希望に役立ちます。

1

WriteOnlyCellを使用してこれを行うことができます。

from openpyxl import Workbook 
wb = Workbook(optimized_write = True) 
ws = wb.create_sheet() 
from openpyxl.writer.dump_worksheet import WriteOnlyCell 
from openpyxl.styles import Style, Font, PatternFill 
cell = WriteOnlyCell(ws, value="highlight") 
cell.style = Style(font=Font(name='Courier', size=36), fill=PatternFill(fill_type='solid',start_color='8557e5')) 
cols=[] 
cols.append(cell) 
cols.append("some other value") 
ws.append(cols) 
wb.save("test.xlsx") 

これが役立ちます。ワークシートの行にスタイルを追加する前にスタイルが許可するものを使用できます。

2

私はコメントすることはできませんように、私はここにディーンの答えに更新投稿します:

openpyxlのAPI(バージョン2.4.7)は、それが今読んでくださいように少し変更されました:

from openpyxl import Workbook 
wb = Workbook(write_only = True) 
ws = wb.create_sheet() 

from openpyxl.writer.dump_worksheet import WriteOnlyCell 
from openpyxl.styles import Font 

cell = WriteOnlyCell(ws, value="highlight") 
cell.font = Font(name='Courier', size=36) 

cols=[] 
cols.append(cell) 
cols.append("some other value") 
ws.append(cols) 
wb.save("test.xlsx") 

希望すること

関連する問題