概要
Attachment変数にExcelファイルを添付すると、ファイルを読み込み、ファイル内の値を各変数に反映させるような処理をやってみる。
画面イメージ
環境
Tokyo
処理の流れ
Excel読み込み処理はスクリプトインクルードで定義。
Attachment変数にonChangeのクライアントスクリプトを設定し、その中で「Excel読み込み処理の呼び出し~変数に値を格納」までの処理を行う。
Excelファイルの内容
以下のようなファイルを対象とする。
Question | Anser |
---|---|
名前は? | 田中太郎 |
出身は? | 東京都 |
年齢は? | 28 |
勤め先は? | ABC Company |
実装
カタログアイテム
以下の変数を定義したカタログアイテムを用意
- Excelファイルを添付するためのAttachment変数
- Excelファイルの内容を格納するための変数
スクリプトインクルード
クライアントスクリプトから呼び出すため、「Client callable」にはチェックをいれておくこと。
var ExcelScript = Class.create();
ExcelScript.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
fileLoad: function() {
var parser = new sn_impex.GlideExcelParser();
var attachment = new GlideSysAttachment();
// Excelファイルの読み込み
var file = this.getParameter('sysparm_file'); // 添付ファイルのsys_idはクライアントから受け取る
var attachmentStream = attachment.getContentStream(file);
parser.setSheetName("Sheet2");
parser.parse(attachmentStream);
// ヘッダーを格納
var headers = parser.getColumnHeaders();
var header1 = headers[0];
var header2 = headers[1];
// 各行の値をJsonに格納
var obj = {};
var i = 1;
while (parser.next()) {
var row = parser.getRow();
var name = "q" + i;
obj[name] = row[header2];
i++;
}
return JSON.stringify(obj);
},
type: 'ExcelScript'
});
クライアントスクリプト
トリガーは、Attachment変数のonChange。
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var ga = new GlideAjax('global.ExcelScript');
ga.addParam('sysparm_name', 'fileLoad');
ga.addParam('sysparm_file', newValue);
ga.getXMLAnswer(function(answer) {
var json = JSON.parse(answer);
g_form.setValue('question1',json.q1);
g_form.setValue('question2',json.q2);
g_form.setValue('question3',json.q3);
g_form.setValue('question4',json.q4);
});
}
補足
Excelファイルのふりがな
Excelを読み込んで値を取得する際、セルにふりがなが設定している場合、ふりがなも一緒に取得してしまう。
そのため、読み込み対象のセルのふりがなはあらかじめ削除しておく必要がある。
例えば以下のセルを読み込むと、
ふりがなまで格納されている。