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

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

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

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

Q&A

解決済

1回答

982閲覧

シート増やすとスプレッドに書き込みできない

ryudaiii

総合スコア6

Google Apps Script

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

0グッド

0クリップ

投稿2021/04/06 06:36

var projectId = 'webapp-ccdf0'; var firestore = FirestoreApp.getFirestore(email, key, projectId); var sheet = SpreadsheetApp.getActiveSheet(); // var ash = SpreadsheetApp.getActiveSpreadsheet(); // var sheet = ash.getSheets()[1]; var deliverys = firestore.getDocuments('deliverys'); var deliveryData = deliverys[0]; //青納品 function getDisBlue(deliveryData) { return deliveryData.fields.distribute.mapValue.fields.blue.stringValue; } console.log(getDisBlue(deliveryData)); //緑納品 function getDisGreen(deliveryData) { return deliveryData.fields.distribute.mapValue.fields.green.stringValue; } console.log(getDisGreen(deliveryData)); //オレンジ納品 function getDisOrange(deliveryData) { return deliveryData.fields.distribute.mapValue.fields.orange.stringValue; } console.log(getDisOrange(deliveryData)); //赤納品 function getDisRed(deliveryData) { return deliveryData.fields.distribute.mapValue.fields.red.stringValue; } console.log(getDisRed(deliveryData)); //青回収 function getPickupBlue(deliveryData) { return deliveryData.fields.pickups.mapValue.fields.blue.stringValue; } console.log(getPickupBlue(deliveryData)); //その他回収 function getPickupOther(deliveryData) { return deliveryData.fields.pickups.mapValue.fields.other.stringValue; } console.log(getPickupOther(deliveryData)); //店舗名 function shop(deliveryData) { return deliveryData.fields.shopName.stringValue; } console.log(shop(deliveryData)); //日付 function date(deliveryData) { return deliveryData.fields.date.stringValue; } console.log(date(deliveryData)); var arr = []; arr.push([shop(deliveryData), date(deliveryData), getDisBlue(deliveryData), getDisGreen(deliveryData), getDisOrange(deliveryData), getDisRed(deliveryData), getPickupBlue(deliveryData), getPickupOther(deliveryData)]); console.log(arr); const row = 2 const rowNum = arr.length const colNum = arr[0].length sheet.getRange(row, 1,rowNum, colNum).setValues(arr) }

納品数などを管理する、webアプリを作っていてGASを使って管理画面を作ろうと思っています。

このままですと、実行すればちゃんとスプレッドに書き込まれるのですが、
シート2を使いたくコメントアウトしているコードを表示してシート2も使えるようにすると、
うまく書き込めません。以下のようなエラーが出てしまいます。

Exception: The parameters (String,number,number,number) don't match the method signature for SpreadsheetApp.Spreadsheet.getRange.

どなたか、改善方法をご教示いただけると助かります。
コメントアウトの部分を外した時は、
var sheet = SpreadsheetApp.getActiveSheet();はコメントアウトして、
getRangeのところもash.getRangeに変えています。
上のコードで書き込みたいのは、シート1(アクティブシート)です。

よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーを平易な日本語に訳すと、

SpreadsheetApp.Spreadsheet.getRange関数の引数の型の組み合わせとして、 (String型, number型, number型, number型) この組み合わせは有効ではありません。

このような意味になります(是非、英語のエラーでも物怖じせず翻訳しながら読む癖をつけて下さい)。

SpreadsheetApp.Spreadsheet.getRange関数の引数の型の組み合わせとしては、以下の2つがサポートされます。

  • (number型, number型)
  • (number型, number型, number型, number型)

質問者さんはおそらくこの2つ目のパターンで使おうとしたのだと思いますが、何らかの形で第一引数(すなわち変数row)がString型になってしまったようです。
提示されたコードは一見大丈夫そうですが、質問されるに当たり省略したコードにどこか怪しいところはありませんか?特に変数rowに値を代入している部分を中心に確認してみて下さい。

その他気になったこと

英単語の綴り

deliveryの複数形はdeliveriesです。

文末のセミコロン

文末にセミコロンを付けている箇所と付けていない箇所が混在しています。どちらかに統一すると、コードが綺麗になります。

余談ですが、JavaScript界隈ではセミコロンを付ける派と付けない派があったりします。因みに私は付ける派です。

投稿2021/04/06 08:25

編集2021/04/06 08:31
Automatic9045

総合スコア313

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

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

ryudaiii

2021/04/06 09:06

昨日に引き続きありがとうございます。 console.log(typeof row) を実行してみたところ、number型になっていました、、
Automatic9045

2021/04/06 09:12

提示されたコードでは、そのようなエラーは出得ないんですよね。 質問のために一部のコードを書き直したりしていませんか?
ryudaiii

2021/04/06 09:26

セミコロン、綴り直します!! 書き直しはしてないですね、、
ryudaiii

2021/04/06 09:28

ash.getRange(row, 1, rowNum, colNum).setValues(arr); やはりこの文でエラーが出てしまいます、
Automatic9045

2021/04/06 09:47

今気づきました。 sheet.getRangeをash.getRangeに書き換えているのが原因だと思います。書き換えずに一度確かめて頂けますか?
ryudaiii

2021/04/06 10:32

そうするとエラーは出ないのですがシート1に表示したいけど、シート2に表示されてしまいます。。。
Automatic9045

2021/04/06 11:04

え?シート2に書き込みたいのでは無いのですか? 質問文からそう読み取ったのですが…
ryudaiii

2021/04/06 12:12

説明不足ですみません、、 シート1です。
Automatic9045

2021/04/06 12:23

シート1に書き込みたいのであれば、以下のようにすると要望通りに動くと思います。 ・提示されたコードの4・5行目をコメントアウト ・3行目はコメントアウトしない ・ash.getRangeに書き換えているならsheet.getRangeに戻す
ryudaiii

2021/04/06 13:44

ありがとうございます!! 解決できました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問