« 高周波・RFニュース 2026年4月17日 atisの3GPP Rel.20ウェビナー動画公開、MWCバルセロナ2026でのGSMA Device Enablement Summit資料公開、ハリファ大学が無線周波数AI言語モデルRF-GPT発表、レドームの解説など | トップページ | Qwen3.6-35B-A3Bが発表され、Ollamaでも使える。そこで電子レンジの動作原理(2.45GHzは水分子の共振周波数でない)と隕石が大気圏突入で燃える原理(摩擦熱ではない)を聞くと、誘電緩和と断熱圧縮について正しく答えられた。今までのローカルLLMで一番賢い回答と思う。 »

2026年4月17日 (金)

ExcelのOfficeスクリプト(TypeScript)で数値計算ライブラリmath.jsを使う(1) Officeスクリプトは外部API呼び出せるし、math.jsは RESTful APIで呼び出せることがわかった。まずは選択したセルのデータを読み、行列演算。LU分解で一次方程式を解き、逆行列と行列式を求める。

以前JavaScriptの数値計算ライブラリmath.jsを使っていろいろやってみるシリーズをやっていた。

でExcelのVBAから乗換が進むと思っていたが、そうでもないOfficeスクリプト(文法はTypeScript)。外部ライブラリ読めないから使えないなとおもっていたが、実はOfficeスクリプトは外部APIが呼び出せる。

Office スクリプトでの外部 API 呼び出しのサポート

またmath.jsはwebサービスとして RESTful APIで呼び出せる。

math.js web service

じゃあ普通に使えそう、ということでやってみる。まずは行列演算。LU分解で一次方程式を解き、逆行列と行列式を求める。

コードはこんな感じで。

async function main(workbook: ExcelScript.Workbook) {
    let range: number[][] = workbook.getSelectedRange().getValues() as number[][];
    let row: number = workbook.getSelectedRange().getRowIndex();
    let column: number = workbook.getSelectedRange().getColumnIndex();
    const n: number = range.length;
    let a: number[][] = Array(n);
    let b: number[] = Array(n);
    let x: number[][];
    let aInv: number[][] = Array(n);
    let det: number[][];

    for (let i = 0; i < n; i++) {
        a[i] = range[i].slice(0, n);
        b[i] = range[i][n];
    }

    // 送信するJSONデータ
    const data = {
        "expr": [
            "a = " + JSON.stringify(a),
            "b = " + JSON.stringify(b),
            "lusolve(lup(a), b)",
            "inv(a)",
            "det(a)"
        ],
        "precision": 14
    };

    // APIへの送信
    const response = await fetch('http://api.mathjs.org/v4/', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(data)
    });

    // レスポンスの処理
    const result: JSONData = await response.json();

    x = JSON.parse(result.result[2]);

    workbook.getActiveWorksheet().getRangeByIndexes(row, column + n + 1, n, 1)
        .setValues(x);

    aInv = JSON.parse(result.result[3]);

    workbook.getActiveWorksheet().getRangeByIndexes(row + n + 1, column, n, n)
        .setValues(aInv);

    det = JSON.parse(result.result[4]);

    workbook.getActiveWorksheet().getRangeByIndexes(row + 2 * n + 2, column, 1, 1)
        .setValues(det);

}

interface JSONData {
    "result": string | string[] | null
    "error": string | null
}

こんな感じで簡単に動いた。

Officescriptmathmatrix01

« 高周波・RFニュース 2026年4月17日 atisの3GPP Rel.20ウェビナー動画公開、MWCバルセロナ2026でのGSMA Device Enablement Summit資料公開、ハリファ大学が無線周波数AI言語モデルRF-GPT発表、レドームの解説など | トップページ | Qwen3.6-35B-A3Bが発表され、Ollamaでも使える。そこで電子レンジの動作原理(2.45GHzは水分子の共振周波数でない)と隕石が大気圏突入で燃える原理(摩擦熱ではない)を聞くと、誘電緩和と断熱圧縮について正しく答えられた。今までのローカルLLMで一番賢い回答と思う。 »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 高周波・RFニュース 2026年4月17日 atisの3GPP Rel.20ウェビナー動画公開、MWCバルセロナ2026でのGSMA Device Enablement Summit資料公開、ハリファ大学が無線周波数AI言語モデルRF-GPT発表、レドームの解説など | トップページ | Qwen3.6-35B-A3Bが発表され、Ollamaでも使える。そこで電子レンジの動作原理(2.45GHzは水分子の共振周波数でない)と隕石が大気圏突入で燃える原理(摩擦熱ではない)を聞くと、誘電緩和と断熱圧縮について正しく答えられた。今までのローカルLLMで一番賢い回答と思う。 »

最近の記事

2026年5月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

最近のコメント

無料ブログはココログ
フォト