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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

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

Google

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

Q&A

解決済

1回答

3183閲覧

Google gas getRange/getDataRangeが呼び出せないというエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

Google

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

0グッド

0クリップ

投稿2018/08/29 08:56

編集2018/08/30 01:27

Google gasにて、特定のフォルダに入っているスプレッドシートのデータを読み込み、
集約する仕組みを作っています。
読み込みたいシート名を特定の名前にし、一致するシート名のデータを読み込ませたいと思ったところ
以下のエラーが発生しました。

TypeError: undefined のメソッド「getRange」を呼び出せません。(行 23、ファイル「データ集約」)表示しない

//データ集約用
function aggregateData1() {

var targetFolder = DriveApp.getFoldersByName('原稿集約').next();
var files = targetFolder.getFiles();

var outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('生データ_集約');
if (! outputSheet) {
var outputSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet('生データ_集約');
}
outputSheet.clear();

var curRow = 1;
var fileList = [];
while(files.hasNext()){
var file = files.next();

var spreadsheet = SpreadsheetApp.open(file); var sh000 = spreadsheet.getSheetByName('集約用_原稿')[0]; var data000 = sh000.getRange().getValues(); fileList.push( { "fileName": file.getName() } ); var lastRow = outputSheet.getLastRow()+1; for (var i=1; i< lastRow;i++){ if(data000[i][100]===''){ sh000.getRange(i+1,1,1,25).copyTo(outputSheet.getRange(lastRow +1,5)); sh000.getRange(i+1,100).setValue("済"); lastRow++; }

return fileList;

}

}
}

gas

試したこと

補足情報(FW/ツールのバージョンなど)

やりたいこととしては、指定のフォルダに入っているスプレッドシートの
特定のシート名(かつ指定のセルに「済」が入っていない)データを集約シートにデータ転記する。
転記が終わったシートのセルには「済」といれる。
です。よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

javascript

1var sh000 = spreadsheet.getSheetByName('集約用_原稿')[0];

ここの[0]が不要です、↓こう

javascript

1var sh000 = spreadsheet.getSheetByName('集約用_原稿'); 2 3var data000 = sh000.getDataRange().getValues();

追記しましたが、getRangeは範囲を取るなので範囲がないとエラーになります。
lastrowとかとってもいいのですが、全データをコピーするだけなら.getDataRange()(データのある範囲なので、具体的にA1とか書かなくても範囲を解釈してくれるやつ)を使うとよいかと思います。

投稿2018/08/29 12:18

編集2018/08/30 00:53
papinianus

総合スコア12705

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

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

退会済みユーザー

退会済みユーザー

2018/08/30 00:34 編集

ご回答ありがとうございます。[0]を消して再度試したところ、
退会済みユーザー

退会済みユーザー

2018/08/30 00:34

ご回答ありがとうございます。消してみたのですが、メソッド getRange() が見つかりません。(行 23、ファイル「データ集約」というエラーがまだ出てしまいます・・
papinianus

2018/08/30 00:51

書き換えますが、.getDataRange()ですね。エラー行を見誤ってました。
退会済みユーザー

退会済みユーザー

2018/08/30 01:23

ありがとうございます。getDataRange()にしてみましたが、TypeError: null のメソッド「getDataRange」を呼び出せません。(行 22、ファイル「データ集約」)となってしまいました・・。 (ファイルに集約用_原稿というシートがあることは確認しました。)何度も申し訳ございません。
papinianus

2018/08/30 03:30

私のほうこそ、回答がブレてすみません。 ただ、nullのメソッドというのは、シートがないときに固有のエラーなので確認させてください。「原稿集約」のフォルダには、スプレッドシートしかなく、そのスプレッドシートには必ず"集約用_原稿"シートがある、という理解で間違いないでしょうか?
退会済みユーザー

退会済みユーザー

2018/08/30 03:58

ご指摘の通り、「原稿集約」のフォルダにはスプレッドシートしかないのですが、一部"集約用_原稿"というシートがないものが含まれていました。これをエラーで拾ってしまっていたのだと思います!ありがとうございます!エラーはでなくなったのですが、欲しい結果に至らないので、そのあたりは新しく整理して質問を投げなおします。何度もお付き合いいただきありがとうございました。勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問