1
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?

More than 1 year has passed since last update.

[ServiceNow] カタログアイテムで添付されたExcelファイル内の内容を変数に反映する

Last updated at Posted at 2022-12-03

概要

Attachment変数にExcelファイルを添付すると、ファイルを読み込み、ファイル内の値を各変数に反映させるような処理をやってみる。

画面イメージ

image.png

環境

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を読み込んで値を取得する際、セルにふりがなが設定している場合、ふりがなも一緒に取得してしまう。
そのため、読み込み対象のセルのふりがなはあらかじめ削除しておく必要がある。

例えば以下のセルを読み込むと、
image.png
ふりがなまで格納されている。
image.png

参考

1
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
1
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?