前提・実現したいこと
特定のツールからダウンロードしたデータをそのまま指定したスプレッドシートへ貼りつけたいです。
発生している問題・エラーメッセージ
Exception: データの列数が範囲の列数と一致しません。データは 51 列ですが、範囲は 1.列です。
と表示されます。
現状はネットで調べそれを流用する形でコードを記述しているため、どの部分に修正が必要か分かっても
どのように修正すればいいか分からない状態となっています。
該当のソースコード
GAS
1function loadCsv() { 2 3 // sheetオブジェクト 4 var spreadsheet9 = SpreadsheetApp.getActive(); 5 6 // 保存用シートtemp_csvを取得する。 7 var tempCsvSheet = spreadsheet9.getSheetByName('temp_csv'); 8 9 // DL URL 10 var url9 = 'https://●●●.●●●.●●●.com'; 11 12 var options9 = { 13 method:'GET' 14 } 15 16 // ダウンロードする 17 var response9 = UrlFetchApp.fetch(url9,options9); 18 19 var csvData = CSV.parse2(response9.getContentText('Shift_JIS')); 20 var csvData = CSV.parse2(response9.getContentText()); 21 22 Logger.log("csvData[0].length(列数) = " + csvData[0].length); 23 Logger.log("csvData.length(行数) = " + csvData.length); 24 25 // はりつけ前にクリアする。 26 tempCsvSheet.clear() 27 28 // はりつける 29 tempCsvSheet.getRange(2,1,csvData.length,csvData[0].length).setValues(csvData); 30 31 32} 33 34// 以下のメソッドはWebのコピーそのまま 35// csv parse 36var CSV = {}; 37CSV.parse2 = function(str) { 38 var i, c, r, q, l, m, v, j, len=str.length, rows = [], row = []; 39 m = (l = str.indexOf('\r\n')<0 ? str.indexOf('\r')<0 ? '\n' : '\r' : '\r\n').length; //改行記号を決定 40 for(i=0,c=r=-1; i<len; i++) { 41 if (str.charAt(i) === '"') { //quoted 42 for(j=0,q=i+1; q<len; j++,q++) { //閉quotを探す 43 q = (q=str.indexOf('"',q)) < 0 ? len+1 : q; //quotの位置、無いなら末尾まで 44 if (str.charAt(++q) !== '"') {break;} //""なら継続 45 } 46 row.push((v=str.substring(i+1,(i=q)-1),j) ? v.replace(/""/g,'"') : v); 47 } else { //not quoted 48 if (c<i) {c=str.indexOf(',',i);c=c<0?len:c;} //直近のカンマ位置と 49 if (r<i) {r=str.indexOf(l,i);r=r<0?len:r;} //直近の改行位置を調べ 50 row.push(str.substring(i,(i=c<r?c:r))); //そこまでを値とする 51 } 52 if (i === r || l === (m>1?str.substr(i,m):str.charAt(i))) {rows.push(row);row=[];i+=m-1;} 53 } 54 str.charAt(i-1) === ',' && row.push(''); //,で終わる 55 row.length && rows.push(row); 56 str.substr(i-1,m) === l && rows.push([]); //最後の改行を無視する場合はコメントアウト 57 return rows; 58};
試したこと
tempCsvSheet.getRange(2,1,csvData.length,csvData[0].length).setValues(csvData);
エラーを見るとここのコードで指定している範囲が違うと推測します。
ですが、どのように修正すればダウンロードしたデータをそのまま範囲指定できるか調べても分からないです。