1

PHPExcel のメモリ制限を克服するために、Python の openpyxl ライブラリを使用して Excel ファイルを生成し、thrift を使用して PHP から Excel ファイルに保存するデータを送信しました。

これで、オブジェクトの配列に複数のクライアントを作成し、Python 側で一度に複数の Excel ファイルを生成しようとしました。optimized_write を False に設定している場合は実行できますが、optimized write フラグを True に設定している場合は実行できません。

    $ob[$X][$Y] = new PhpPythonExcel();
    $ob[$X][$Y]->client->openExcel(True); //openExcel method sets optimized_write flag to True of False.
    ...
    //write something to the files.
    ...
    $ob[$X][$Y]->client->saveFile($fileName);

そうすることは可能ですか、または利用可能なハックはありますか?

4

1 に答える 1

1

はい、可能です。ハックは必要ありません。最適化されたライタールーチンをわずかに変更すると、これを簡単にテストできます。

from openpyxl import Workbook

library = []
sheets = []
for x in range(5):
    wb = Workbook(optimized_write = True)
    library.append(wb)
    sheets.append(wb.create_sheet())

for irow in xrange(100):
    for idx, ws in enumerate(sheets):
        # + idx so they are all different
        ws.append(['%d' % (i + idx) for i in xrange(200)])

for idx, wb in enumerate(library):
    wb.save('new_big_file_{}.xlsx'.format(idx)) # don't forget to save !
于 2013-03-19T06:10:55.503 に答える