結論から書きます
この記事を書いている株式会社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のスタックがどういう条件で起きるのか——その機序は追い切れていません。分かっているのは「実案件でそうなった」という事実だけです。分かった気になって書くより、分からないと書きます。
関連する記録
- 経理は13本、マーケは1本 — 27本の自動化ジョブが教えてくれた「AIに任せてよい仕事」の見分け方 — 「無人で回せるか」で仕事を仕分ける、同じ判断軸の話。
- APIがない管理画面は自動化を諦めるしかないのか — noteの記事公開とメール追加を「ブラウザごと」無人化した実例 — アプリを「外から操作する」自動化の、別の実例と制約。
- AI翻訳で1,000件超を公開している自社メディアが、日→英だけは「載せない」と決めた理由 — 同じ道具でも条件次第で使えなくなる、同型の判断記録。
まとめ
- 補助金の公式Excel様式に、AIで数値を自動記入している。方法はxlwingsとopenpyxlの2つ。
- xlwingsは画像・書式・数式・入力規則を壊さないが、実案件でApple Event待ちのスタックが起き、fill_form.py は不採用になった。無人運用には向かない。
- openpyxlは速く安定して無人で回るが、保存すると画像が消え、入力規則の拡張も一部消える。値と数式は保持される。
- 使い分けは、画像・書式が必須なら xlwings(人が見ている前提)、画像なしで無人なら openpyxl。様式の中身で選ぶ。
- 「一発で完璧記入」の完成形はまだ無い。どちらを使っても何かが壊れるトレードオフを承知で選んでいるのが、現在地。