30万件程度のレコードをエクセル形式で分割して自動的にエクスポートする方法について

Ryota
Tera Guru

インストールソフトウェアのデータをエクセル出力したいのですが、OOTBではエクスポートの制限があり、エクセルにダウンロード出来ず、対応方法を探しております。できれば自動的に10万件づつなど分割してエクセルファイルに出力し、メールでファイルを送付したいのですが、スクリプト等で実行する方法はありますか?

 

3件の返信3

iwai
Giga Sage

以下のScriptは、指定した分割行数で分割したDownload用 URLを作成するScriptです(昔作った物)。このURLにRedirectをClientScriptで行うことで自動的にDownloadが始まります。

// Version 2.0 汎用的なファイル出力版
var myInstance = 'myInstance'; // インスタンス名
var myTable = 'incident'; // エクスポートテーブル名
var myQuery = ''; // エクスポートQuery 必要な場合に記載
var myFileType = 'CSV'; // エクスポート形式 CSV,XLSX,XML 
var setLimit = 10000; // エクスポート分割行数
var sysid = '';
var exportUrl = [];
var gr = new GlideRecord(myTable);
gr.initialize();
var fields = gr.getFields();
var myField = [];
var num;

exportUrl.push('https://' + myInstance + '.service-now.com/' + myTable + '_list.do' +
    '?sysparm_query=' +
    (!!myQuery ? encodeURIComponent(myQuery) + '%5EORDERBYsys_id' : 'ORDERBYsys_id') +
    '&sysparm_record_count=' + setLimit +
    '&sysparm_default_export_fields=all&' + myFileType);
num = setLimit - 1;
do {
    gr = new GlideRecord(myTable);
    gr.initialize();
    if(myQuery) gr.addEncodedQuery(myQuery);
    gr.orderBy('sys_id');
    gr.chooseWindow(num, num + 2);
    gr.query();
    if (gr.next()) {
        sysid = '' + gr.getValue('sys_id');
        exportUrl.push('https://' + myInstance + '.service-now.com/' + myTable + '_list.do' +
            '?sysparm_query=sys_id%3E' + sysid +
            (!!myQuery ? '%5E' + encodeURIComponent(myQuery) : '') +
            '%5EORDERBYsys_id' +
            '&sysparm_record_count=' + setLimit +
            '&sysparm_default_export_fields=all&' + myFileType);
    }
    num += setLimit;
} while (gr.next());
for (num = 0; num < exportUrl.length; num++) {
    gs.info(exportUrl[num]);
}

 

早速のご返答ありがとうございます。参考にさせていただき試してみますので、また何かありましたら追加質問させてください。

cororon
Kilo Guru

UI16システムプロパティ→インポートエクスポートを選択し、Excel Format (.xlsx)のExport のLimitの上限値をデフォルト値から変更してあげてみてはいかがでしょうか。

※エクスポートする数が多いと、ファイルを直接DLするのではなくメールで送付するオプションが表示されると思います。インスタンスが一時的に重くなる可能性があるのでそこは検証しながら調整すればよいかと思いました。