NATURAL LANGUAGE, TURNED INTO VERIFIED DOCUMENT EDITS
自然言語の指示を、ローカルの AI が LibreOffice のコードに翻訳し、実際の
.xlsx に適用します。Microsoft Office は要りません。そして
出来上がりを読み戻し、本当に変わったかを確かめてから完了とします。
道具もこのページも AI が書き、AI が描画して確かめました。 ailine は basrun の上に立っています。

上の Before が入力(書式のない受注台帳・データは架空のサンプルです)。自然言語の指示 12 個で下の After になりました ― 金額の降順・合計行(どの行を検証したかまで機械が言います)・見出しの太字と水色・桁区切り・罫線・列幅の自動調整・表全体の中央揃え・そして取引先ごとの集計シート。各指示とも適用後に読み戻して機械検証済み。Excel は使っていません
AI にコードを書かせて実行させる ―― それだけでは足りません。 「成功しました」と表示するコードは、何もしていなくてもそう表示します。 実際、エラーひとつ出さずに「読み込んだ / 実行した / 保存した」と表示され、 セルは 1 つも変わっていない、ということが起きます。
そこで ailine は、適用の前後で文書を読み戻して差分を取ります。 値・書式・色・罫線・結合・列幅・シート・グラフ ―― 変化がゼロなら 「何もしていない」とみなして書き直させます。動いた、ではなく、 本当に変わったことを機械で確かめてから、人に差分を見せます。
「金額で降順に並べ替えて」。ローカルの AI が LibreOffice のコードに翻訳します。
自動バックアップと undo つきで原本に反映(--copy でコピーにも)。
既存データを上書きする操作は、反映の前に確認を挟みます。形式は .xlsx のままです。
読み戻して差分を確認。変化ゼロなら書き直し。★ 走った ≠ できた を機械で防ぎます。
難しい操作(並べ替え・グラフ・ピボット・VLOOKUP)は、 AI に一から書かせず、人が検証した部品を呼ばせます。当たり率が上がり、 「使う側は内部の名前を知らなくていい」まま、確実に動きます。
下の 2 枚は、すべて自然言語の一言から生まれ、 AI が描画して確かめたものです。値が正しいことと、見た目が正しいことは別なので、 その見た目も AI が描画して確かめています。

「金額の棒グラフを作って」― タイトル・軸は見出しから自動。LibreOffice の本物のグラフ

「部門ごとの金額を集計表に」― 罫線・カンマ・合計まで整えた表。本物のピボット(DataPilot)も生成できます
ローカルの小さな AI(qwen2.5-coder:7b)でも、値・論理・書式は
ほぼ一発で書けます。難所は検証済みの部品で補い、外部にデータは一切送りません。
請求書が 40 冊。条件に合う行だけを 1 冊に集めたい ― 一言で頼めます。 原本は読むだけ(1 バイトも変えません)。読めなかった冊・怪しい値は、 黙らず名指しで返します。下はすべて実際の実行そのまま(データは架空のサンプルです)。

よくある現場 ― 請求書のフォルダ。これを 1 冊ずつ開く代わりに、フォルダごと頼みます
> python ailine.py run 請求書2026-07 "金額が40000以上の行を抜き出して" ■ ailine run(フォルダ抽出) folder=C:\Demo\請求書2026-07 出力先: C:\Demo\請求書2026-07_金額40000以上.xlsx 条件: 金額 40000 以上 40 ファイル中 38 照合 → 38 中 32 ファイルで計 60 行一致 ⚠ 請求書_007.xlsx: 取れなかった(欠け: 金額)── 中身の検査は未実施 ⚠ 請求書_031.xls: 取れなかった(旧形式(.xls))── 中身の検査は未実施 並べ替えて照合: 4 冊(内訳は --json) 合計行 76 行を 38 冊で除外(内訳は --json) ⚠ 請求書_023.xlsx: 合計行(8行目) の値 140100 ≠ 明細の和 138600 行の完全会計: 38 冊すべてで成立(データ行 = 一致 + 不一致 + 合計行の除外・内訳は --json) 出力データ行数: 60 Σ金額: 元 4701000 / 出力 4701000
40 冊のうち、読めない 2 冊は名指しと理由。23 冊目は合計行の値が明細の和と合わないことを、両側の数字つきで指摘 ― 人が見落としていた帳簿のミスを、道具が拾った瞬間です。

出力ブックを開いたところ(LibreOffice)。怪しい冊由来の行だけが薄赤、右端の出所列(元ファイル・元行)でどの行も出どころを辿れます ― 下のタブに検分シートが同梱されているのが見えます

出力の 2 枚目に検分シートを同梱 ― 所見は「どのファイルの・どのシートの・どのセルか」まで書き、クリックで元のセルに直接飛べます。このブックを渡せば、検算の記録ごと相手に渡ります
納品した後、誰かがファイルを手で直したら? ― 検算だけを単独で再実行できます。
> python ailine.py verify 請求書2026-07_金額40000以上.xlsx 請求書2026-07 ■ ailine verify out=C:\Demo\請求書2026-07_金額40000以上.xlsx folder=C:\Demo\請求書2026-07 行数: 元 60 / 出力 60 Σ金額: 元 4701000 / 出力 4624000 ⚠ 金額 の合計が一致しません: 元 4701000 / 出力 4624000 ⚠ 帰属が一致しません: 請求書_002.xlsx の 4行目 列『金額』 元 120000 / 出力 43000
あとから編集された 1 セルを、どの冊の何行目の列がいくつ→いくつまで名指しで特定(終了コードでも機械に伝わります)。信じる対象が、道具から検算に移ります
必要なのは ローカルの LLM(ollama)と LibreOffice だけです。 Microsoft Office も、クラウド API も要りません。モデルは差し替えられます。
# 自然言語 → 生成 → 適用(バックアップ+undo つき) → 効果を検証 → 差分を表示 python ailine.py run 見積.xlsx "各行の金額に 単価 × 数量 を入れて" # 適用せず、生成した内容を見るだけ(レビュー用) python ailine.py run 見積.xlsx "..." --dry # 別のモデルに載せ替える(天井を上げたいとき) python ailine.py run 見積.xlsx "..." --model qwen2.5-coder:32b
検証済みのヘルパが、難しい UNO 操作を引き受けます ―
並べ替え・グラフ・ピボット・VLOOKUP・見出しの太字。モデルは「列と向き」だけ選べばよく、
ContainsHeader のような arcane な落とし穴には触れません。
確かめた範囲と、確かめていない範囲を分けて書きます。 聞かれてから答えるのと、先に書いておくのとでは意味が違うためです。
CharWeightAsian が要る点を実測で押さえました)。数値も壊れません。.xlsx であること。undo で 1 段階ずつ戻せること。2026 年の Excel には Copilot の Agent Mode があります。Microsoft 365 と Copilot ライセンスがあり、データをクラウドに出せる環境なら、あれは強力な選択肢です。ailine は同じ「自然言語で文書を動かす」という問いを、逆側の制約で解いています ── データを機械の外に出せない現場のために。
Copilot はクラウドのモデルで推論します。ailine はローカルの LLM だけで動き、 文書も指示も外部に送信しません。一度セットアップすればネットワークの無い環境でも動くので、データを外に出せない規程の現場や閉域網でも使えます。
Copilot は Microsoft 365 と Copilot ライセンスが前提です。ailine が使う LibreOffice と ollama はどちらも無償 ── Office もサブスクリプションもライセンス料も一切要りません。導入の稟議が「ゼロ円」から始められます。
Copilot は実行前に計画を示し、編集箇所を強調表示します。ailine は実行後に出来上がりを読み戻し、本当に変わったかを機械で検証します。事前の計画と事後の検証は、別のものです。
どちらが優れているか、ではありません。守備範囲が違います。 ailine の持ち場は、クラウドに出せない机の上です。
重い所(headless の LibreOffice を安全に駆動する部分)は basrun が持っています。 ailine が足したのは、自然言語からの生成と、効果を読み戻して検証する層です。 ―― 組んで初めて出来ることの方に、時間を使っています。