
キントーンのファイル書き出し(CSVのエキスポート)って使いにくいですよね。
頻繁にCSVをダウンロードされているお客様から「一覧画面にCSVをダウンロードするボタンを作って」との要望がありました。最初は検索したらすぐにプラグインかJavaScriptが見つかると思っていたのですが、これが意外と無かったのでChatGPTに手伝ってもらって作りました。
このJavaScriptを使うと、下記のようなボタンが表示されます。
ぱっと見でよく目立つし、わかりやすいですね。

JavaScriptのコードです。
(function() {
'use strict';
// ダウンロード対象フィールド
var fields = [
'フィールドコード1',
'フィールドコード2',
'フィールドコード3',
'フィールドコード4',
'フィールドコード5',
'フィールドコード6'
];
// 一覧画面にボタン設置
kintone.events.on('app.record.index.show', function () {
if (document.getElementById('downloadCsvBtn')) return;
var myIndexButton = document.createElement('button');
myIndexButton.id = 'downloadCsvBtn';
myIndexButton.innerText = 'CSVダウンロード';
myIndexButton.className = 'kintoneplugin-button-normal';
kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
// ボタンクリック時
myIndexButton.onclick = async function () {
try {
var appId = kintone.app.getId();
// 1. アプリ情報を取得してアプリ名を取り出す
var appResp = await kintone.api('/k/v1/app', 'GET', { id: appId });
var appName = appResp.name.replace(/[\\\/:*?"<>|]/g, '_');
// 2. ファイル名を作成
var date = new Date();
var y = date.getFullYear();
var m = ('0' + (date.getMonth() + 1)).slice(-2);
var d = ('0' + date.getDate()).slice(-2);
var fileName = appName + '_' + y + m + d + '.csv';
// 3. 一覧の条件を取得
var condition = kintone.app.getQueryCondition() || '';
// 4. 条件に従って全件取得
var allRecords = await fetchAllRecords(appId, condition);
// 5. CSV生成
var csv = [];
csv.push(fields.join(','));
allRecords.forEach(function(record) {
var row = fields.map(function(f) {
var val = record[f] ? record[f].value : '';
return '"' + (val ? val.replace(/"/g, '""') : '') + '"';
});
csv.push(row.join(','));
});
// 6. Shift-JISに変換
var sjisArray = Encoding.convert(Encoding.stringToCode(csv.join('\r\n')), 'SJIS', 'UNICODE');
var blob = new Blob([new Uint8Array(sjisArray)], { type: 'text/csv' });
// 7. ダウンロード処理
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
link.click();
} catch (err) {
alert('エラー: ' + err.message);
}
};
});
// 一覧条件に従って全件取得
async function fetchAllRecords(appId, condition) {
var allRecords = [];
var limit = 500;
var offset = 0;
while (true) {
var query = condition + ' limit ' + limit + ' offset ' + offset;
var resp = await kintone.api('/k/v1/records', 'GET', {
app: appId,
query: query,
fields: fields
});
allRecords = allRecords.concat(resp.records);
if (resp.records.length < limit) break;
offset += limit;
}
return allRecords;
}
})();
使い方と注意事項
- 上記コードをテキストファイルに貼り付け、適度なファイル名(csvdownload.js など)に変更して下さい。
- 「フィールドコード1~6」の部分を、ダウンロードしたい実際のフィールドコード名とその数に合わせて修正して下さい。
- スクリプトをキントーンの「アプリを設定」→「設定」→「JavaScript / CSSでカスタマイズ」にアップロードして下さい。
- なお文字コードにShift-JIS(Excelで文字化けしにくい)を使用していますので、encoding.jsが必要です。
上記のリンクからencoding.min.jsをダウンロードして、当スクリプトより先に読み込ませて下さい。 - 「CSVダウンロード」ボタンを押すと、一覧条件で絞り込まれた状態のCSVをダウンロードします。
※全件をダウンロードしたい場合は一覧条件を「(すべて)」にして行って下さい。 - ダウンロードされるCSVのファイル名は「アプリ名_YYYYMMDD.csv」となっています。
なお当スクリプトによって問題が発生しても、一切の責任を負いかねますのでご了承ください。
