※関連関数
GAS ドライブのファイル情報を取得してスプレッドシートに書き出す - ray88’s diary
GAS ファイルURLからファイルIDを抽出する - ray88’s diary
GAS CSVを読み取る - ray88’s diary
/** * 任意のレコード配列(1件=オブジェクト)を、 * 行固定・列バラバラ配置でシートに出力する共通関数(append版)。 * * @param {number} startRow 見出し行の行番号(例: 1) * @param {Object[]} records 出力するデータ(1要素 = 1行のオブジェクト) * @param {Object[]} columns 列定義の配列 * - {string} header 見出し文字列 * - {string} key records[i][key] で参照するプロパティ名 * - {number} col シートの列番号 (1=A, 3=C…) * - {function(any, Object): any} [formatter] 表示用に加工したい場合 * @param {GoogleAppsScript.Spreadsheet.Sheet} [sheet] */ function writeRecordsSparseAppend(startRow, records, columns, sheet) { sheet = sheet || SpreadsheetApp.getActiveSheet(); const headerRow = startRow; const dataStartRow = headerRow + 1; const sheetLastRow = sheet.getLastRow(); const writeStartRow = (sheetLastRow < dataStartRow) ? dataStartRow : sheetLastRow + 1; columns.forEach(colDef => { const col = colDef.col; // ヘッダー(必要なら) const headerCell = sheet.getRange(headerRow, col); if (headerCell.isBlank()) { headerCell.setValue(colDef.header); } const colValues = records.map(rec => { const raw = rec[colDef.key]; const v = colDef.formatter ? colDef.formatter(raw, rec) : raw; return [v]; }); if (colValues.length > 0) { sheet .getRange(writeStartRow, col, colValues.length, 1) .setValues(colValues); } }); }
■使用例
/** * CSVファイルの指定列を、スプレッドシートにとびとびで追記出力する * 便利ラッパー関数(内部で ①+② を呼ぶだけ) */ function importCsvColumns(fileId, startRow, columns, sheet) { const records = readCsvAsObjects(fileId); // ① writeRecordsSparseAppend(startRow, records, columns, sheet); // ② }
呼び出し例
function sampleImportCsv() { const fileId = 'ここにCSVのファイルID'; // CSVのヘッダー名と、シート列の対応を定義 const columns = [ { header: '取引先コード', key: 'customer_code', col: 3 }, // C列 { header: '取引先名', key: 'customer_name', col: 5 }, // E列 { header: '金額', key: 'amount', col: 8 }, // H列 ]; importCsvColumns(fileId, 1, columns); // 1行目をヘッダー行にする }