PythonでVBAやピボットテーブルを使っているExcelファイルを読み込んで保存するとエラーとなる場合の対処法

プログラム(困) 仕事の効率化

PythonでExcelを読み込んで保存するプログラムを作りました。
読み込むファイルは、マクロ有りのExcel(~.xlsm)であり、ピボットテーブルも使っているファイルでした。
ですが、エラーが発生しました。
何度もエラーを繰り返し、やっとエラーとならずに動くようになったので、見つけたエラーと対処方法を記載していきます。

keep_vba=Trueの記載なし

マクロ有りのExcel(~.xlsm)は、「load_workbook」する際に、「keep_vba = True」を指定する必要がありました。これを指定しないと以下のエラーが発生します。

当初のプログラムは以下の通りでした。

keep_vbaの指定なし

import openpyxl
wb = openpyxl.load_workbook(“./input.xlsm”)
wb.save(“./output.xlsm”)

何も指定せずExcelを読み込むとVBAが削除されるようです。
以下の通り「keep_vba = True」を指定するとVBAが削除されません。

keep_vbaの指定あり

import openpyxl
wb = openpyxl.load_workbook(“./input.xlsm”,keep_vba=True)
wb.save(“./output.xlsm”)

ピボットテーブルのグループ化

上のプログラムでピボットテーブルが無いファイルは保存できましたが、ピボットテーブルが有るファイルを保存しようとすると、以下のエラーが発生しました。

読み込んだファイルには、ピボットテーブルが2つあり、片方は削除されましたが、もう片方は残ってました。

ということは、ピボットテーブル自体が悪いのではなく、それぞれのピボットテーブルの違いの何かが原因でエラーになっていることになります。
大きな違いはピボットテーブルの中でグループ化を行っているか行っていないかでした。

グループ化をやめたらエラー発生しなくなり、再度グループ化したらエラー発生したので、とりあえず今回のエラー原因はピボットテーブルの中でグループ化だったということになります。

WEB検索してもみつからなかった内容なので、同じ原因で困っている人の参考になれば嬉しいです。

コメント

タイトルとURLをコピーしました