1

でExcelワークブックを開き、xlrdでコピーしxlutils、で更新しxlwtてから、別のファイルに書き戻すコードがあります。

結果のワークブックには、元のワークブックに存在していたすべての名前付き範囲がありません。名前付き範囲がオリジナルに存在することは 100% 確信しています。なぜなら、私は実際に (xlrdオブジェクトから、コピーの前に) それらを読み取り、それらに基づいて更新を行っているからです。

これが を使用する自然な効果であると仮定すると、同じワークブックのバージョンから読み取った名前付き範囲を再作成する方法はありxlutils.copy.copyますか? ドキュメント (少なくとも、私が見つけたもの) はまばらです。xlwtxlrd

問題を示す python セッションを次に示します。

>>> from xlrd import open_workbook
>>> wb = open_workbook('sc_auction_template.xls', formatting_info=True)
>>> print len(wb.name_obj_list) # see, there are named ranges
9
>>> from xlutils.copy import copy
>>> wb2 = copy(wb)
>>> wb2.save('test.xls')
>>> wb = open_workbook('test.xls')
>>> print len(wb.name_obj_list) # but now there are none!
0
4

1 に答える 1

0

今のところ、残念ながら答えはnoですxlwt。名前の書き込みはサポートされていません。いつか来るかもしれませんが、すぐには期待できません。

私の知る限り、プログラムで .xls ファイルに名前を書き込む唯一の方法は、実行中のアプリケーションのインスタンスを自動化することです。たとえば、Windows 上の Excel 自体pywin32pywinautoVisual Basic のフレーバーなどがあります。 Excel を使用できない場合は、OpenOffice.org をスクリプト化する同様の方法を使用できます。

于 2013-02-14T04:28:45.590 に答える