ST_FUNC開発日記

建築構造設計Excelアドイン開発の記録

オリジナル関数の作成テスト

クイックスタートがうまくいったので、チュートリアルの次の手順へ行ってみようとしたが、 いきなりWeb からデータを要求みたいな関数になった。

最初は基本の関数だけでいいので、こっちのチュートリアルを続ける必要はないかな。 関数については概要のところに記載があるようだ。

Excel でカスタム関数を作成する - Office Add-ins | Microsoft Learn

このコードでカスタム関数を定義する方法によると

  • ./src/functions/functions.ts:カスタム関数を定義するコードと関数を定義するコメント
  • ./manifest.xml:カスタム関数が使用するファイルの場所の指定。 また、作業ウィンドウ ファイルおよびコマンド ファイルの場所を表示すると共に、カスタム関数が使用するランタイムも指定。
  • ./src/functions/functions.html:カスタム関数を定義する JavaScript ファイルにscript 参照を提供

とある。functions.htmlは生成されていないのだが、なくてもいいということなのかな。

ということはfunctions.tsとmanifest.xmlをいじれば関数を作成できるようだ。

functionsを見るとこのようなコードになっている。

/**
 * Adds two numbers.
 * @customfunction
 * @param first First number
 * @param second Second number
 * @returns The sum of the two numbers.
 */
export function add(first: number, second: number): number {
  return first + second;
}

TypeScriptは初めてだけど、見れば何となく何をすればいいのかわかる。

アドインを起動したときに説明が出た気がするので、上のドキュメントコメントがそのまま関数の説明として反映されるっぽい?

これをまねして新しい関数を作ってみる。

/**
 * 2数の掛け算を実行する
 * @customfunction
 * @param first かけられる数
 * @param second かける数
 * @returns 掛け算した結果
 */
export function test_times(first: number, second: number): number {
  return first * second;
}

/**
 * 文字列を結合する
 * @customfunction
 * @param first 前の文字列
 * @param second 後ろ文字列
 * @returns 連結した文字列
 */
export function test_add_string(first: string, second: string): string {
  return first +"+"+ second;
}

また、名前空間がCONTOSOになってしまうのは嫌なので、修正したい。

検索をかけるとmanidest.xml

<bt:String id="Functions.Namespace" DefaultValue="CONTOSO"/>

という行があったので、名前空間STFに変更。 ここで、

$ npm run start:web -- --document {url}

でアドインを起動。 しかし、アドインは読み込まれたが、関数がCONTOSOのままだ。 そういえば、キャッシュを削除していなかった。

キャッシュの削除 - ST_FUNC開発日記

キャッシュを削除してから試してみたけど、やっぱりうまくいかない・・・

と思ったら、ビルドしていなかった(;´Д`)

$ npm run build
$ npm run start:web -- --document {url}

で再チャレンジ

うまくいった!

ちゃんと関数の挿入画面にもメタ情報が入っている。

これでfunction.tsをどんどん編集していけば関数の追加はして行けることになる。 意外とシンプルで分かりやすい。xlaより全然わかりやすいかも。

本日の修正

オリジナル関数の作成テスト · st-func/st_func_addin@c410887 · GitHub

ところで、コンソールはコマンドプロンプトではなくpowershellを使うことにした。 まずファイルリストがlsが使えるのがうれしいのと、閉じた後に前回のコマンド履歴があるのがうれしい。 (アドイン起動のコマンドが長くて面倒なので)