web-dev-qa-db-ja.com

xlwingsとpythonを使用してワークシートをコピーする

Pythonでxlwingsを使用していますが、ワークシートをコピーする方法がわかりません。特定のワークシートをテンプレートとして扱い、変更を加える前に毎回そのワークシートをコピーしたい。

私はxlwingsのバージョン0.11.4を使用しています。そのような機能が組み込まれていない場合は、xlwingsの外に出てpywin32関数を使用してこれを実現してもかまいません。

15
P. Nokes

いくつかの場所を調べてpywin32のドキュメントを読んだ後、ワークシートをコピーするための解決策を見つけました。

_import xlwings as xw
wb = xw.Book('filename.xlsx')
sheet = wb.sheets['Sheet1']

#copy within the same sheet
sheet.api.Copy(Before=sheet.api)

#copy to a new workbook
sheet.api.Copy()

#copy a third time at the beginning of the sheets
sheet2 = wb.sheets['sheet1 (2)']
sheet.api.Copy(Before=sheet2.api)

#copy to an existing workbook by putting it in front of a worksheet object
sheet.api.Copy(before=existingSheet.api)
_

これはdoes xlwingsが提供するネイティブ機能の外に出ます。 xlwingsはpywin32のラッパーであるため、.api()呼び出しにより、xlwingsに記載されていないpywin32関数にアクセスできます。

また、「後」コマンドはワークシート内では機能しないことに注意してください。コピーされたシートで新しいワークブックが開きます。必要に応じてインデックスを並べ替えることができると思いますので、これは大きな問題にはなりません。