エクセルの複数行データを、サービスカタログの同形式の表に貼り付けることができますか?

Chihiro2024
Giga Expert

現在エクセルデータを別のもの(ServiceNow以外)の申請にコピー&ペーストで貼り付けて申請しています。
今回サービスカタログで申請フォームを作成しているのですが、エクセルの複数行データを申請フォーム(同形式の表)に同じようにコピー&ペーストで貼り付けたいです。
実現可能でしたら方法を教えてください。

1 件の受理された解決策

iwai
Giga Sage

たとえば、Excelの複数行をコピーして、ServiceNowのテキスト項目にペーストして(タブ区切りの文字列データになる)、そのデータをScriptでMultiRowに設定するのはどうでしょうか。

iwai_0-1737024999530.png

テキスト項目のonChange のScript

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue === '') {
        return;
    }

    // クリップボードフィールドから値を取得
    var clipboard = newValue;

    if (!clipboard) {
        return;
    }

    // クリップボードデータを改行で分割して各行を取得
    var rows = clipboard.split('\n');
    var jsonArray = [];

    // MultiRowのデータ構造:各行には「name」と「quantity」の2つのカラムがあることを想定
    rows.forEach(function(row) {
        // 各行をタブ文字で分割してnameとquantityを取得
        var columns = row.split('\t');

        // 各行に少なくとも2つのカラム(nameとquantity)があるか確認
        if (columns.length >= 2) {
            var name = columns[0].trim();
            var quantity = columns[1].trim();

            // 配列にオブジェクトを追加
            jsonArray.push({ name: name, quantity: quantity });
        }
    });

    // 配列をJSON文字列に変換
    var jsondata = JSON.stringify(jsonArray);

    // マルチ行フィールドの値を設定
    g_form.setValue('test_multi_row', jsondata);
}

 

元の投稿で解決策を見る

1件の返信1

iwai
Giga Sage

たとえば、Excelの複数行をコピーして、ServiceNowのテキスト項目にペーストして(タブ区切りの文字列データになる)、そのデータをScriptでMultiRowに設定するのはどうでしょうか。

iwai_0-1737024999530.png

テキスト項目のonChange のScript

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue === '') {
        return;
    }

    // クリップボードフィールドから値を取得
    var clipboard = newValue;

    if (!clipboard) {
        return;
    }

    // クリップボードデータを改行で分割して各行を取得
    var rows = clipboard.split('\n');
    var jsonArray = [];

    // MultiRowのデータ構造:各行には「name」と「quantity」の2つのカラムがあることを想定
    rows.forEach(function(row) {
        // 各行をタブ文字で分割してnameとquantityを取得
        var columns = row.split('\t');

        // 各行に少なくとも2つのカラム(nameとquantity)があるか確認
        if (columns.length >= 2) {
            var name = columns[0].trim();
            var quantity = columns[1].trim();

            // 配列にオブジェクトを追加
            jsonArray.push({ name: name, quantity: quantity });
        }
    });

    // 配列をJSON文字列に変換
    var jsondata = JSON.stringify(jsonArray);

    // マルチ行フィールドの値を設定
    g_form.setValue('test_multi_row', jsondata);
}