毎年部門費用予算を作るとき、まずWordのテンプレートを各部門に送って記入してもらい、署名・押印・返送・保管——流れはスムーズで、署名・押印・保管まで一気通貫、儀式感は満点。だが、それを集計する日が来るまでは。
十数個のWord文書の中の表は、見た目は整っていても、合計できない、フィルターできない、数式を入れられない。画面を見ながら数字を一つひとつExcelに打ち込むしかなく、打ち終わったら照合もしなければならず、行を読み違えないかとヒヤヒヤする。年中、どこかの部門が予算を変更してWordを再送してくれば、Excelにまた書き写し直し。書き写したところで、元と合っているとは限らない。
「今はAIが何でもできる」と言われるが、この山のようなWordの表をAIに放り込んでも、読み取れるのはただのテキストの塊だ。どの数字がどの科目に属するのか、どの行が合計なのかは、人間がもう一度確認しなければならない——AIは書くのを手伝えても、表をExcelに移す代わりにはなれない。
表はすでにWordの中にあるのに、なぜそのままExcelとして保存し、数字が自分でセルに飛び込んでくれないのか。なぜ人間が画面を見ながらもう一度書き写し、しかも書き写したものが原本と一致している保証もないのか。
要するに、訴えはたった一言に尽きる。Wordの中の表を、そのまま計算できるExcelにできないか、ということだ。プログラムが予算のロジックを理解する必要も、誰かが科目の帰属を照合する必要もない。ただ「表の中の数字」をWordからExcelへ移し、もう人間が画面を見ながら打ち直さなくて済むようにしたいだけだ。
これは一見、それなりの長さのスクリプトを書く話に思える——文書を開き、表を見つけ、行と列を走査し、セルごとに書き込む。しかしSpire.Doc for Pythonは、もっと直接的な入口を用意している。Word文書全体をExcelファイルとして保存でき、表を手動で分解する必要がない。中心となる操作はたった4行で、表を自分で探す必要すらない——
インストール
pip install Spire.Doc
from spire.doc import *
document = Document()
document.LoadFromFile(inputFile)
document.SaveToFile(outputFile, FileFormat.XLSX)
document.Close()
たったこの4行だけ——Wordを読み込み、Excelとして保存し、閉じる。ループもなく、表を走査することもなく、セルごとに運ぶこともない。あの山のような予算テンプレートをスクリプトに放り込めば、出てくるのは1つの.xlsxファイルだ。
補足しておくと、FileFormat.XLSX という Excel へ直接保存する機能は、Spire.Doc for Python のかなり新しいバージョンで追加されたものだ。古いバージョンではこの列挙値が存在しない可能性がある。実行する前にバージョンを確認しておくほうが、実行して失敗してから調べ直すより時間の節約になる。
コードは短いが、一つ明確にしておくべきトレードオフがある。文書全体が丸ごとExcelにマッピングされるため、表の外にあるタイトルや説明文、ヘッダー・フッターが一緒に入るかどうか、またどのような形で配置されるかは、あなたのコードではなくSpireの変換エンジン次第だ。表のデータだけをきれいに配置したいなら、直接変換したExcelから余分な内容を手動で消す必要があるかもしれない。とにかく「まず動かして、計算できる表が一つあればいい」というなら、4行のコードが最短ルートだ。。
また、無料版には制限がある。Free Spire.Doc は1文書あたり最大500段落・25表までという制限がある。十数部門の予算テンプレートでも、各文書に表が1つだけなら無料版で足りる。しかし今後数十份を一括処理したり、ある文書に表が特に多かったりする場合は、完全版を検討する必要がある。まず1~2か月分のファイルで試しに実行し、制限に引っかからないことを確認するのが最も稳妥なやり方だ。
Wordテンプレートはこれまで通り送り、署名・押印もこれまで通り行い、保管もこれまで通り残す。変わるのは集計する日だけだ。これまでは画面を見ながら数字を一つひとつExcelに打ち込み、打ち終わっても行を読み違えていないか不安だった。今はファイルをスクリプトに放り込み、4行のコードを走らせれば、Excelの総括表がひとりでに出来上がる。年中、どこかの部門が予算を変更してWordを再送してきても、もう慌てない——もう一度走らせて上書き更新すれば、原本と集計表の間に「書き写す」という断絶はもうない。AIには代われないあの運搬の工程も、今ではループすら不要だ。
