質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

ダウンロード

リモートシステムからローカルシステムへとデータを受信する事、もしくはそのようなデータ転送を行う事をダウンロードと呼びます。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

1回答

1249閲覧

【GAS】ダウンロードしたデータをそのままスプレッドシートへ貼りつけ

退会済みユーザー

退会済みユーザー

総合スコア0

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

ダウンロード

リモートシステムからローカルシステムへとデータを受信する事、もしくはそのようなデータ転送を行う事をダウンロードと呼びます。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2020/12/15 05:25

前提・実現したいこと

特定のツールからダウンロードしたデータをそのまま指定したスプレッドシートへ貼りつけたいです。

発生している問題・エラーメッセージ

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);

エラーを見るとここのコードで指定している範囲が違うと推測します。
ですが、どのように修正すればダウンロードしたデータをそのまま範囲指定できるか調べても分からないです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

macaron_xxx

2020/12/16 23:20

csvDataはきちんとn*mの2次元配列になっていますか? 途中でm列未満の行が発生していないですか?
guest

回答1

0

Exception: データの列数が範囲の列数と一致しません。データは 51 列ですが、範囲は 1.列です。

ってことは、Logger.log("csvData[0].length(列数) = " + csvData[0].length); これが 1 なのでは。

データ依存なので、response9.getContentText() の内容を質問に追記してください。

投稿2020/12/17 05:19

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問