0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Office Script で パラメータがわたらないって思ってたら・・Console.log の第二引数効かないのね

Posted at

背景

Card明細をメールで送って、Automate で処理して Adaptive Card に変換しようとした。

Office Scriptsなら簡単に変換できるから便利!とか思ってたら、思わぬところで躓いた :sweat_smile:

概要

Office Scripts(Excel の TypeScript 実行環境)で console.log に第2引数を与えても期待通りに出力されない。

当初、

再現手順

  1. Office Scripts のスクリプトに以下を記述して実行
function main(workbook: ExcelScript.Workbook) {
    const obj = { a: 1, b: 2 };
    // Office Scripts のコンソールは引数を複数受け取れない?? 
    console.log("ラベル: ", obj);
}
  1. 実行ログを見ると、"ラベル: " のみが出力され、obj の中身が出力されない

原因(考察)

  • Office Scripts の console.log 実装は、ブラウザや Node.js の console.log と完全に同じではなく、実行環境(Excel のクラウド実装やランタイム)が console.log の可変引数をサポートしていないと思われる。

回避策

  1. 文字列連結でログを出す(簡単)
console.log("ラベル: " + JSON.stringify(obj));
  1. テンプレート文字列を使う(可読性重視)
console.log(`ラベル: ${JSON.stringify(obj)}`);
  1. 複数の情報を分けてログ出力する(可視性確保)
console.log("ラベル:");
console.log(JSON.stringify(obj));
  1. 詳細ログを 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 は可変引数が扱えない。

知らずに、娘の宿題の横で一緒になって唸ってました :sweat_smile:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?