ValenceではExcelをダウンロードする際に、ウィジェット設定でダウンロードする際のファイル名を変更することが可能です。しかし、ファイル名は動的に変更することができないためダウンロード内容によってファイル名を変更したりタイムスタンプなどを付けることができません。

今回はアプリ変数を使用して動的にExcelのファイル名を変更する方法を紹介いたします。
アプリ変数を使用したファイル名の変更
アプリケーションの設計画面から「ウィジェットプロパティをリンク」で「ダウンロード」>「excelFileName」にアプリ変数を設定することで、アプリケーションからファイル名の変更が可能となります。

ログインしているユーザー名を後ろにつけて出力
Excelのファイル名を「出荷伝票_{ログインユーザー名}」にします。
まず、アプリ変数を用意し上記で説明したウィジェットプロパティの「excelFileName」に設定します。
次にアプリ変数のExpression(式)に追記します。

return '出荷伝票_' + appVar.nabUser;
”出荷伝票”の文字列にアプリ変数のNabUser(Valenceユーザー名が取得できるアプリ変数)を付けることで、ログインユーザーに応じてファイル名が変更されます。
<表示例>

タイムスタンプを付けて出力
次にファイル名にタイムスタンプを付けてダウンロードできるように変更します。
ファイル名は「出荷伝票_YYYYMMDD_HHMMSS」の形式にします。
スクリプト実行で、ダウンロードボタンが押された際の時間を取得してファイル名に設定します。
①まず今回使用するウィジェットに名前を付けます(今回はGrid01)。
スクリプト内でウィジェットを識別するために必要になるため、変更する場合はスクリプト内も変更してください。

②時刻を設定するアプリ変数を用意します(今回はDLdate)。
③アプリケーションの設計画面の「動作内容」の「startup」>「スクリプト実行」を選択し、スクリプトを入力。

const Grid = getWidget('Grid01');
const button = Grid.query("button[tooltip='ダウンロード']");
//ダウンロードボタンが押されたとき
button[0].on('click',function(){
//現在日付取得
const now = new Date();
//年月日・時刻に分割
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day = String(now.getDate()).padStart(2, '0');
const hour = String(now.getHours()).padStart(2, '0');
const minute = String(now.getMinutes()).padStart(2, '0');
const second = String(now.getSeconds()).padStart(2, '0');
//YYYYMMDD_HHMMSSの形式
const timestamp = `${year}${month}${day}_${hour}${minute}${second}`;
//アプリ変数DLdateに格納
setAppVar('DLdate', timestamp);
});
④ファイル名を設定するアプリ変数(ExcelName)のExpression(式)に時間を格納したアプリ変数(DLdate)を設定する。

return '出荷伝票_' + appVar.DLdate;
<表示例>

おわりに
今回はExcelのダウンロード時のファイル名を動的に変更する方法を紹介いたしました。アプリ変数に時間や項目を設定することでファイル名を内容に応じて変えることが可能となります。ぜひご活用ください。