とにかく動かすPAD ‐ 【JavaScriptの実行】のサンプル

Power Automate Desktop のアクション【JavaScriptの実行】のサンプルです。随時、追加します。

概要

一般的な言語の関数で言うところの引数と戻り値の使い方にクセがあります。
「引数」は、引数として指定するのではなく、アクションの外にある変数(に%を付けたもの)をそのまま使います。
「戻り値」はWScript.Echo(戻り値)とします。(デフォルトでは)変数JavascriptOutputに代入されたものとしてアクションの外で使えます。
アクションの中ではconstを使った宣言をすると正しく動作しないようです。

注意

エラーがわからない

対応策
【JavaScriptの実行】の生成された変数のScriptErrorをオンにしておくとフロー変数にエラー内容が出力されるのでデバッグしやすい。

日本語(2バイト文字)があると使用できない

対応策
【JavaScriptの実行】で次のようにする。

text = encodeURIComponent('%InputText%');
text = decodeURIComponent(text);

改行があると使用できないことがある

対応策
【正規表現のエスケープテキスト】で処理してから【JavaScriptの実行】に渡す。

日時

現在の日時を取得

【現在の日時を取得】
生成された変数:CurrentDateTime

【JavaScriptの実行】

date_obj = new Date('%CurrentDateTime%')
WScript.Echo(date_obj)

結果
Thu Nov 10 11:47:18 UTC+0900 2024

当月1日

【JavaScriptの実行】

date_obj = new Date('%CurrentDateTime%')
year=date_obj.getFullYear();
month=date_obj.getMonth();
day=1;
date_obj=new Date(year,month,day);
WScript.Echo(date_obj)

結果
Sun Dec 1 00:00:00 UTC+0900 2024
(2024年12月17日時点)

当月末日

【JavaScriptの実行】

date_obj = new Date('%CurrentDateTime%')
year=date_obj.getFullYear();
month=date_obj.getMonth()+1;
day=0;
date_obj=new Date(year,month,day);
WScript.Echo(date_obj)

結果
Tue Dec 31 00:00:00 UTC+0900 2024
(2024年12月17日時点)

日付の書式設定

Excelの書式設定を再現します。
DateInputに日付(Datetime型)をセットします。
Patternに書式をセットします。
書式は yyyy, y, mm, m, dd, d, dddd, ddd, aaaa, aaa に対応しています。

【日付の選択ダイアログを表示】
生成された変数:DateInput

【変数の設定】
変数:Pattern
値:y年m月d日(aaa) yyyy-mm-dd

【JavaScriptの実行】

pattern = "%Pattern%";
date_obj = new Date("%DateInput%");

year = date_obj.getFullYear();
month = date_obj.getMonth();
day = date_obj.getDate();

y = String(year);
yyyy = ("0000" + year).slice(-4);
m = String(month + 1);
mm = ("0" + (month + 1)).slice(-2);
d = String(day);
dd = ("0" + day).slice(-2);

weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
dddd = weekdays[date_obj.getDay()];
ddd = dddd.slice(0, 3);

ja_weekdays = ["日", "月", "火", "水", "木", "金", "土"];
aaa = ja_weekdays[date_obj.getDay()];
aaaa = aaa + "曜日";

pattern = pattern.replace("yyyy", yyyy);
pattern = pattern.replace("y", y);
pattern = pattern.replace("mm", mm);
pattern = pattern.replace("m", m);
pattern = pattern.replace("aaaa", aaaa);
pattern = pattern.replace("aaa", aaa);
pattern = pattern.replace("dddd", dddd);
pattern = pattern.replace("ddd", ddd);
pattern = pattern.replace("dd", dd);
pattern = pattern.replace("d", d);

WScript.Echo(pattern);

結果
2024年12月18日(水) 2024-12-18
(2024年12月18日の場合)

西暦から和暦への変換

次のページを確認してください。

とにかく動かすPAD ‐ 和暦から西暦、西暦から和暦に変換する方法
和暦から西暦に変換和暦から西暦への変換は簡単です。【テキストをdatetimeに変換】変換するテキスト:令和6年3月1日結果はdatetime型で「2024/03/01 0:00:00」となります。西暦から和暦に変換西暦から和暦への変換は面...

営業日判定

銀行の営業日(土曜日、日曜日、12月31日から1月3日までは非営業日)を前提に日付を渡すと、営業日であれば「営業日」、非営業日であれば「成人の日」「日曜日」などと返します。
祝日は総務省が提供しているsyukujitsu.csvをダウンロードし適当なフォルダに保存して【ファイルからテキストを読み取る】で指定します。

【日付の選択ダイアログを表示】
生成された変数:ThisDate

【ファイルからテキストを読み取る】
ファイルパス:syukujitsu.csv
生成された変数:FileContents

【正規表現のエスケープテキスト】
エスケープするテキスト:%FileContents%
生成された変数:FileContents

【JavaScriptの実行】
実行するJavaScript:

text = encodeURIComponent("%FileContents%");
text = decodeURIComponent(text);
date_obj = new Date("%ThisDate%");
year = date_obj.getFullYear();
month = date_obj.getMonth() + 1;
day = date_obj.getDate();
weekday = date_obj.getDay();
ymd = year + "/" + month + "/" + day;
re = new RegExp(ymd + ",(.*)");
if (results = text.match(re)) {
  result = results[1];
} else if (weekday == 0) {
  result = "日曜日";
} else if (weekday == 6) {
  result = "土曜日";
} else if ((month == 12 && day == 31) || (month == 1 && day <= 3)) {
  result = "年末年始";
} else {
  result = "営業日";
}
WScript.Echo(result);

統計

合計

【変数の設定】
値:[1,2,3,4]

【JavaScriptの実行】
実行するJavaScript:

input_var = %InputVar%;
sum = 0;
for(i in input_var){
  sum += input_var[i];
}
WScript.Echo(sum);

平均

【変数の設定】
値:[1,2,3,4]

【JavaScriptの実行】
実行するJavaScript:

input_var = %InputVar%;
sum = 0;
for(i in input_var){
  sum += input_var[i];
}
average = sum / input_var.length;
WScript.Echo(average);

中央値

ポイントは余りを求める「%」を「%%」とすること。

【変数の設定】
値:[1,2,3,4]

【JavaScriptの実行】
実行するJavaScript:

input_var = %InputVar%;
input_var.sort(function(a, b) {
  return a - b;
});
num = input_var.length;
if(num %% 2 == 0){
  median = (input_var[num / 2 - 1] + input_var[num / 2]) / 2;
} else {
  median = input_var[Math.floor(num / 2)];
}
WScript.Echo(median);

コメント

タイトルとURLをコピーしました