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

JavaScriptのコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
(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」となっています。
なお当スクリプトによって問題が発生しても、一切の責任を負いかねますのでご了承ください。