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
}
|
こんな感じで簡単に動いた。
« 高周波・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 Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/3-5/10(2026.05.10)
- Codex(GPT-5.5)でサザエさんじゃんけんの次の手を予測するアプリを作る。時系列予測はまず標準ライブラリのみで実施、一次マルコフがいい結果になったので次はscikit-learn,Keras,Prophetなどを実行。勾配ブースティングが一番よく精度は59.86%に達した。次回はチョキだそうだ。(2026.05.06)
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/4/26-5/3(2026.05.03)
「学問・資格」カテゴリの記事
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/3-5/10(2026.05.10)
- 高周波・RFニュース 2026年5月8日 QualcommがSnapdragon 6 Gen5と4 Gen5発表、Pythonの高周波ライブラリscikit-rfがv1.12.0でKlopfensteinテーパ導入、Mini-CircuitsがGNSSを車載複数システムに使うアプリケーションノート発行、GSAがミッドバンドスペクトラムのレポート発行(2026.05.08)
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/4/26-5/3(2026.05.03)
「日記・コラム・つぶやき」カテゴリの記事
- RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/3-5/10(2026.05.10)
- 高周波・RFニュース 2026年5月8日 QualcommがSnapdragon 6 Gen5と4 Gen5発表、Pythonの高周波ライブラリscikit-rfがv1.12.0でKlopfensteinテーパ導入、Mini-CircuitsがGNSSを車載複数システムに使うアプリケーションノート発行、GSAがミッドバンドスペクトラムのレポート発行(2026.05.08)
- Codex(GPT-5.5)でサザエさんじゃんけんの次の手を予測するアプリを作る。時系列予測はまず標準ライブラリのみで実施、一次マルコフがいい結果になったので次はscikit-learn,Keras,Prophetなどを実行。勾配ブースティングが一番よく精度は59.86%に達した。次回はチョキだそうだ。(2026.05.06)
« 高周波・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で一番賢い回答と思う。 »



コメント