背景
Card明細をメールで送って、Automate で処理して Adaptive Card に変換しようとした。
Office Scriptsなら簡単に変換できるから便利!とか思ってたら、思わぬところで躓いた ![]()
概要
Office Scripts(Excel の TypeScript 実行環境)で console.log に第2引数を与えても期待通りに出力されない。
当初、
再現手順
- Office Scripts のスクリプトに以下を記述して実行
function main(workbook: ExcelScript.Workbook) {
const obj = { a: 1, b: 2 };
// Office Scripts のコンソールは引数を複数受け取れない??
console.log("ラベル: ", obj);
}
- 実行ログを見ると、
"ラベル: "のみが出力され、objの中身が出力されない
原因(考察)
- Office Scripts の
console.log実装は、ブラウザや Node.js のconsole.logと完全に同じではなく、実行環境(Excel のクラウド実装やランタイム)がconsole.logの可変引数をサポートしていないと思われる。
回避策
- 文字列連結でログを出す(簡単)
console.log("ラベル: " + JSON.stringify(obj));
- テンプレート文字列を使う(可読性重視)
console.log(`ラベル: ${JSON.stringify(obj)}`);
- 複数の情報を分けてログ出力する(可視性確保)
console.log("ラベル:");
console.log(JSON.stringify(obj));
- 詳細ログを Excel のシートに書き出す(ログ保持)
大きなオートメーションでは、ログをシートに書き出すことで実行履歴を残す方法が確実
function writeLog(workbook: ExcelScript.Workbook, message: string) {
const sheet = workbook.getWorksheet("Log") || workbook.addWorksheet("Log");
const lastRow = sheet.getUsedRange()?.getRowCount() || 0;
sheet.getRange(`A${lastRow + 1}`).setValue(message);
}
あとがき
Office Scripts の console.log は可変引数が扱えない。
知らずに、娘の宿題の横で一緒になって唸ってました ![]()