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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

24866閲覧

GASでSpreadsheetに書き込みをしたいが、エラーが出る

4242

総合スコア8

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/04/13 02:30

編集2020/04/13 06:50

前提・実現したいこと

google Spreadsheetにデータ(1行4列)がシート1に書き込まれたら、書き込まれたデータとシート2にすでにあるデータを比較して、シート2に上書きor最終行に挿入したいが、エラーが出てうまく動かない。
参考にしているページ:
https://qiita.com/rf_p/items/f423ed2b23b789b2ebe9

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

Exception: パラメータ(number[])が SpreadsheetApp.Range.setValues のメソッドのシグネチャと一致しません。(行 24、ファイル「コード」)

該当のソースコード

ほとんど上記参考ページのコードのコピペです、、、

GAS

1function createList(){ 2 var sheetRegist = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1'); 3 var lastRowRegist = sheetRegist.getLastRow(); 4 var newData = sheetRegist.getRange(lastRowRegist, 1, 1, 4).getValues(); 5 6 var sheetTarget =SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2'); 7 8 insertOrUpdate(sheetTarget, newData); 9} 10 11function insertOrUpdate(sheetTarget, newData) { 12 var sheetRegist = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1'); 13 var lastRowRegist = sheetRegist.getLastRow(); 14 var newData = sheetRegist.getRange(lastRowRegist, 1, 1, 4).getValues(); 15 var A = newData[0][0]; 16 var B = newData[0][1]; 17 var C = newData[0][2]; 18 var D = newData[0][3]; 19 20 Logger.log(newID); 21 22 var row = findRow(sheetTarget, newData[0]); 23 if (row) { 24 sheetTarget.getRange(row, 1, 1, 4).setValues([A, B, C, D]); 25 } else { 26 sheetTarget.appendRow([newDate, newID, newType, newTime]); 27 } 28} 29 30function findRow(sheetTarget, date) { 31 var searchDate = Utilities.formatDate(new Date(date), 'Asia/Tokyo','yyyy/MM/dd'); 32 var values = sheetTarget.getDataRange().getValues(); 33 34 for (var i = values.length - 1; i > 0; i--) { 35 var dataDate = Utilities.formatDate(new Date(values[i][0]), 'Asia/Tokyo','yyyy/MM/dd'); 36 if (dataDate == searchDate) { 37 return i + 1; 38 } 39 } 40 return false; 41} 42

試したこと

setValuesの中の引数をnewDataにしていてもエラーが出たので、
https://qiita.com/takuya_yamamot/items/54757d4511723a00ec6d
を参考にデータを個別に分けたけれど、エラーが解消されません。

https://teratail.com/questions/245539
上記で「V8 Runtimeのバグ」とありますが、どこをどう修正すると動くようになるでしょうか。。。

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

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

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

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

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

guest

回答1

0

ベストアンサー

javascript

1// sheetTarget.getRange(row, 1, 1, 4).setValues([A, B, C, D]); 2 sheetTarget.getRange(row, 1, 1, 4).setValues([[A, B, C, D]]);

V8 は関係ないですし、その質問は関係ないです。
(そもそもその質問でもバグはなかった派です)

投稿2020/04/13 12:25

papinianus

総合スコア12705

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

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

4242

2020/04/13 23:35

いつもありがとうございます。ご指摘のところ修正して動きました。 追加で申し訳ありませんが、同じところを setValues([newData]) にすると [Ljava.lang.Object;@3219cd26 が入力されるのは何故でしょうか。。。
papinianus

2020/04/14 13:53

[A, B, C, D] → 配列 [[A, B, C, D]] → 配列の配列 - setvalues は配列の配列を設定する必要があります。 newData はそれ自身配列の配列です。なので [newData] は "配列の配列の配列" になります。 setValues は配列の配列の中身をセルに入れますので、getRange(row, 1, 1, 1).setValues([newData]) は特定の 1 つセルに(配列の配列の配列から、配列の配列の皮を剥いて)配列を入れようとします。なのでそういう変なものが入るんじゃないかと想像します。 (あくまで想像ですが、getRange(row, 1, 1, 4).setValues([newData]) ではエラーになるように思いました) いずれにしても配列の次元があっていないと望むものは設定できません。
4242

2020/04/15 00:16

申し訳ありません。 setValues([[A, B, C, D]])のご指摘で二次元配列かーと気付いたので、 じゃあ setValues(newData) でも入るかな?と思ったのですが、なんか変なのが入ってしまうのです。 しかも同じコードを2回動かすときちんと日付が入力されるという謎仕様。。。 とりあえず最初のコードでやりたいことはできるので、素人は深く考えないことにします。 ありがとうございました。
papinianus

2020/04/15 14:12

> setValues([newData]) → ひとつ前のコメント > setValues(newData) →今回のコメント は違います。今回のコメントのものなら動くので、きちんと〜、は謎でないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問