結論から書きます

この記事を書いている株式会社TOEは、補助金の申請書類づくりにAIを使っています。補助金には、役所が配布する公式のExcel様式が多くあります。事業計画書その3のような、書式・画像・数式・入力規則(ドロップダウン)が作り込まれたxlsxです。ここにAIで数値を自動記入しています。

やり方は2つあります。実際のExcelアプリを裏で操作するxlwingsと、Excelを起動せずファイルを直接読み書きするopenpyxlです。

結論から言うと、どちらを使っても何かが壊れました。 xlwingsは案件で応答待ちのまま固まって不採用になり、openpyxlは保存すると様式内の画像が消えました。「どちらが優れているか」ではなく、様式の中身を見て案件ごとに使い分けている。その一次記録です。


用語を3つだけ

  • xlwings(エックスエルウィングス) … Pythonから、実際のExcelアプリを裏で起動して操作するライブラリです。Excel本体が処理するので、書式や画像は保存後もそのまま保たれます。
  • openpyxl(オープンパイエクセル) … Excelを起動せず、xlsxファイルそのものをPythonで直接読み書きするライブラリです。速く、Excelが無い環境でも動きます。
  • Apple Event(アップルイベント) … Mac上で、プログラムからアプリ(今回はExcel)に命令を送る仕組みです。相手が応答しないと、送った側は返事を待ったまま固まります。

2つの方法で、実際に起きたこと

xlwings:様式は無傷。ただし固まった

省力化投資補助金の案件(マコーズベーグル様の事業計画書その3)では、xlwingsを採用しました。build_part3_xlsx.py というスクリプトで、書式・画像・数式を保持したまま公式様式に数値を記入しています。公式様式をそのまま提出できる形で埋められるのが、xlwingsの一番の価値です。

ところが別案件の fill_form.py は、ExcelのApple Event待ちでスタック(固まったまま応答しなくなる)し、不採用になりました。Excel本体を裏で動かす以上、Excel側が応答しなければ、こちらはずっと待ち続けます。人が横で見ていれば対処できますが、無人の自動処理では致命的です。固まったスクリプトが居座れば、後続のジョブまでブロックしかねません。Excel本体が起動している必要がある、という前提もつきます。

openpyxl:固まらない。ただし画像が消えた

経営革新計画の案件(TOE自社)では、記入をopenpyxlの直書きで実施しました。Excelを起動しないので、速く、安定して、無人で回ります。固まる要素がそもそもありません。

ただし、openpyxlで保存すると様式に埋め込まれた画像が消えます。 省力化投資の案件では、このために「openpyxlは画像消失するため使用禁止」と明記して不採用にしました。市町村選択のような入力規則(ドロップダウン)の拡張も一部消えます。 一方で、セルの値と数式は保持されます。


対比表:どちらも一長一短

方法A:xlwings 方法B:openpyxl
仕組み Excelアプリを裏で起動して操作 xlsxファイルを直接読み書き
利点 画像・書式・数式・入力規則を壊さない。公式様式をそのまま埋められる Excel不要。速く安定、無人で回る。固まらない。値と数式は保持
欠点(実際に起きた) Apple Event待ちでスタック(fill_form.py は不採用に)。無人運用に不向き。Excel本体の起動が必要 保存すると画像が消える。入力規則の拡張が一部消える
採用した案件 省力化投資補助金(build_part3_xlsx.py、事業計画書その3) 経営革新計画TOE(openpyxl直書きで記入)

実際の使い分け

判断基準は、様式の中身です。

  • 画像や作り込んだ書式が必須の様式 → xlwings。人がExcelを起動している前提で、目視しながら回します。
  • 画像が無く、無人で回したい様式 → openpyxl。固まらないことを優先します。

「どちらか一方で全部いける」構成には、まだ辿り着いていません。


正直に書いておきます

現時点で、「AIに公式様式を一発で完璧記入させる」完成形はありません。 xlwingsは無人運用でハングし、openpyxlは装飾を一部壊す。このトレードオフを承知のうえで、壊れて困らないほうを案件ごとに選んでいるのが実態です。

なお、なぜopenpyxlで画像が消えるのか、xlwingsのスタックがどういう条件で起きるのか——その機序は追い切れていません。分かっているのは「実案件でそうなった」という事実だけです。分かった気になって書くより、分からないと書きます。


関連する記録


まとめ

  • 補助金の公式Excel様式に、AIで数値を自動記入している。方法はxlwingsopenpyxlの2つ。
  • xlwingsは画像・書式・数式・入力規則を壊さないが、実案件でApple Event待ちのスタックが起き、fill_form.py は不採用になった。無人運用には向かない。
  • openpyxlは速く安定して無人で回るが、保存すると画像が消え、入力規則の拡張も一部消える。値と数式は保持される。
  • 使い分けは、画像・書式が必須なら xlwings(人が見ている前提)、画像なしで無人なら openpyxl。様式の中身で選ぶ。
  • 「一発で完璧記入」の完成形はまだ無い。どちらを使っても何かが壊れるトレードオフを承知で選んでいるのが、現在地。