
前提
シートをコピーするコードを作成しています。
変数に文字列を代入しようとすると読み込みが止まらず進めなくなりました。
実現したいこと
変数には代入できる文章に文字数制限がありますでしょうか。
もしあるなら、長い文章を代入するなにか良い方法があればご教示いただきたいです。
発生している問題・エラーメッセージ
読み込みがおわらず先に進めない。
エラーメッセージ
該当のソースコード
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/ツールのバージョンなど)
些細なことでもいいのでアドバイスいただけると嬉しいです。
よろしくお願いします。

いつも、特定の行(回答データ)を読み込もうとしたときに止まってしまうのでしょうか。
それとも、止まってしまう事象は不定期に発生するのでしょうか(止まらないときもあれば、止まるときもある?)
おはようございます。
返信をありがとうございます!
仕事で使っているデータをそのままテストしていますので、いつも違う行なんです。
まだテスト段階で実際に使用した事がなく、今のところ毎回停止しています。
先程、簡単なコードに置き換えていろいろテストしてみて気づいた事がありまして
実行すると流れるのにデバッグすると進まないのです。
これは以前ご回答いただいたフォームのデバッグと同じように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);
}

ご回答ありがとうございます。こちらでも、過去、長い文字列をデバッガで表示しようとすると、デバッガが停止しましたことがありましたので、デバッガの不具合かと思います。
そうなんですね。変数に長い文字列を入れる事ができないのではなくて、デバッガのエラーであってプログラムとしては正常なんですね。勉強になりました。ありがとうございました。

回答1件
あなたの回答
tips
プレビュー