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

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

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

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

Q&A

解決済

1回答

2982閲覧

GoogleAppsScriptで変数に文字列を代入できない

Amumu

総合スコア31

Google Apps Script

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

0グッド

0クリップ

投稿2022/04/12 15:57

前提

シートをコピーするコードを作成しています。
変数に文字列を代入しようとすると読み込みが止まらず進めなくなりました。

実現したいこと

変数には代入できる文章に文字数制限がありますでしょうか。
もしあるなら、長い文章を代入するなにか良い方法があればご教示いただきたいです。

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

読み込みがおわらず先に進めない。

エラーメッセージ

該当のソースコード

Google

1/*============================= 2 フォーム回答メールを受信すると 3 シートをコピーする 4=============================*/ 5function newMailChk(){ 6 7 let threads = GmailApp.search('label:フォーム回答 is:unread', 0, 10); 8 let newThread = GmailApp.getMessagesForThreads(threads); 9 let count = 0; 10 count = newThread.length; 11 if (count===0){ 12 return; 13 } 14 15 let ss = SpreadsheetApp.getActiveSpreadsheet(); 16 let cSht = ss.getSheetByName("回答imp"); 17 let pSht = ss.getSheetByName("回答"); 18 let cRow = cSht.getLastRow(); 19 let pRow= pSht.getLastRow(); 20 let c = count-1 21 cRow = cRow-c 22 23 if (cRow===pRow){ 24 return; 25 } 26 27 for (let i=0; i<count; i++){ 28 pRow++; 29 let copyRange = cSht.getRange(cRow,1,1,58); 30 let pasteRange = pSht.getRange(pRow,1,1,58); 31 copyRange.copyTo(pasteRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES,false); 32 33 let copyValue = pasteRange.getValues(); 34 let all_data =[]; 35 let itemNo = 1; 36 37 for(let i=0; i<=copyValue.length; i++){ 38 let time = copyValue[i][0]; 39 let name = copyValue[i][1]; 40 let title = copyValue[i][2]; 41 let naiyou = copyValue[i][3];================エラー変数 42 let tanto = copyValue[i][4]; 43 let taisho = copyValue[i][5]; 44 45 for(let u=7; u<58; u=u+5){ 46 if(copyValue[i][u] !=="" || copyValue[i][u+1] !=="" || copyValue[i][u+2] !=="" || copyValue[i][u+3] !==""){ 47 let meishou = copyValue[i][u]; 48 let koushiki = copyValue[i][u+1]; 49 let amazon = copyValue[i][u+2]; 50 let data = [time,name,title,naiyou,tanto,taisho,cRow,itemNo,meishou,koushiki,amazon]; 51 all_data.push(data); 52 } 53 itemNo++ 54 } 55 } 56 57 let pasteSS = SpreadsheetApp.openById("*****"); 58 let pasteSht = pasteSS.getSheetByName("シート1"); 59 let pasteLastRow = pasteSht.getLastRow(); 60 pasteSht.getRange(pasteLastRow+1,1,all_data.length,all_data[0].length).setValues(all_data); 61 62 cRow++ 63 // スレッドを既読にする 64 newThread[i][0].markRead(); 65 } 66

試したこと

文字数制限があるのかと一文字づつ増やしてみましたが明確な文字数制限はみつけられませんでした。
記号が関係しているのかと試してみましたが確証は得られませんでした。
変数の設定に問題があるのかと思い、
let title = copyValue[i][2];
ひとつ手前の変数に文章を代入したところ、この変数から進めなくなりました。
なので代入する文章に問題があるのだと思います。
同じくらい長い文字列でいろいろ試したところURLだとすんなり進みます。

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

些細なことでもいいのでアドバイスいただけると嬉しいです。
よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/04/12 22:06

いつも、特定の行(回答データ)を読み込もうとしたときに止まってしまうのでしょうか。 それとも、止まってしまう事象は不定期に発生するのでしょうか(止まらないときもあれば、止まるときもある?)
Amumu

2022/04/13 00:21 編集

おはようございます。 返信をありがとうございます! 仕事で使っているデータをそのままテストしていますので、いつも違う行なんです。 まだテスト段階で実際に使用した事がなく、今のところ毎回停止しています。 先程、簡単なコードに置き換えていろいろテストしてみて気づいた事がありまして 実行すると流れるのにデバッグすると進まないのです。 これは以前ご回答いただいたフォームのデバッグと同じようにGASのデバッグ特有の事象なのでしょうか。 必要ないかもしれませんが簡易のテストに使用したコードを記載します。 よろしくお願いいします。 ================================= テスト用簡易コード ================================= function myFunction() { let ss = SpreadsheetApp.getActiveSpreadsheet(); let cSht = ss.getSheetByName("コピー"); let pSht = ss.getSheetByName("ペースト"); let cRow = cSht.getLastRow(); let pRow= pSht.getLastRow(); let copyRange = cSht.getRange(cRow,1,1,4); let pasteRange = pSht.getRange(pRow,1,1,4); copyRange.copyTo(pasteRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES,false); let copyValue = pasteRange.getValues(); console.log(copyValue[0][2])===========ログには代入されていると流れる let test = copyValue[0][0] let test2 = copyValue[0][1] let test3 = copyValue[0][2]==============デバッグ時停止位置 let test4 = copyValue[0][3] let sht3 = ss.getSheetByName("シート3"); let range3 = sht3.getRange(1,1); range3.setValue(test3); }
退会済みユーザー

退会済みユーザー

2022/04/13 22:18 編集

ご回答ありがとうございます。こちらでも、過去、長い文字列をデバッガで表示しようとすると、デバッガが停止しましたことがありましたので、デバッガの不具合かと思います。
Amumu

2022/04/14 06:38

そうなんですね。変数に長い文字列を入れる事ができないのではなくて、デバッガのエラーであってプログラムとしては正常なんですね。勉強になりました。ありがとうございました。
guest

回答1

0

自己解決

いろいろ試して、エラーをひとつづつ解決したら思うように変数に代入され動いてくれました。
原因はわからないままですが、いろんなサイトを参考に組み合わせていたので何か不具合があったのかもしれません。
返信くださったqnoir様ありがとうございました。

投稿2022/04/13 07:58

Amumu

総合スコア31

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問