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

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

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

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

Q&A

解決済

2回答

214閲覧

グーグルスプレッドでエラーが出ます。

menbou14

総合スコア17

Google Apps Script

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

0グッド

0クリップ

投稿2019/08/29 05:03

編集2019/08/29 21:00

グーグルスプレッドで表を出力しようとすると、「TypeError: undefined のメソッド「toString」を呼び出せません。」と出ます。

詳しく書くと、まずグーグルスプレッドで表を作ります。

そして、「ツール」>「スクリプトエディタ」を開きます。
そこへ、以下のコードをコピペしました。

scrpit

1// テーブルタグ作成関数を実行(セル結合あり) 2 3// テーブルタグ作成関数を実行(横並び) 4function runCreateTableTag() { 5createTableTag(1); 6} 7 8// テーブルタグ作成関数を実行(縦並び) 9function runCreateTableTagTate() { 10createTableTag(2); 11} 12 13 14// テーブルタグ作成関数 15function createTableTag(margeFlg) { 16var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // アクティブシート 17var range = sheet.getDataRange(); // データのある範囲 18var numRows = range.getNumRows(); // データのある行数 19var numCols = range.getNumColumns(); // データのある列数 20var cells = range.getValues(); // データの配列 21var tableTag = ''; 22var tableHead = '<table class="dsc2item col4" cellspacing="1">\n<tbody>\n'; 23var tableHead2 = '<table class="dsc2item col4" cellspacing="1" style="margin-bottom: 15px">\n<tbody>\n'; 24var arrayTH = []; 25 26// テーブルタグ 27roopline: for(var i = 0; i < numRows; i++){ 28var rowTag = ""; 29 30// 縦並び用の処理 31if(margeFlg == 2){ 32rowTag = tableHead2 + "<tr>"; 33}else{ 34if(i == 0){ 35tableTag = tableHead; 36} 37rowTag = "<tr>"; 38} 39 40for(var j = 0; j < numCols; j++){ 41if(j == 3){ continue; } 42var margeString = ""; 43 44// 背景色でタグを設定 45var cellTag = ""; 46if(range.getBackgroundColors()[i][j] === "#ffffff"){ // セルの背景が白色の場合 *配列は行、列の順 47cellTag = "td" 48}else{ 49cellTag = 'td style="background-color:' + range.getBackgroundColors()[i][j] + '"'; 50} 51 52// 縦並び用の処理 53if(margeFlg == 2){ 54if(i == 0){ 55for(var x = 0; x < numCols; x++){ 56var Head = ''; 57Head = cells[i][x].toString().replace(/\n/g, "<br>") + "</td>"; 58arrayTH[x] = "<" + cellTag + ' style="max-width: 200px">' + Head; 59} 60rowTag = ''; 61continue roopline; 62}else if(i >= 1){ 63if(j >= 1){ 64rowTag += "<tr>" + arrayTH[j]; 65}else{ 66rowTag += arrayTH[j]; 67} 68} 69} 70 71 72rowTag += "<" + cellTag + margeString; // セルの結合も設定 73 74// 文字寄せ 75var alignString = range.getHorizontalAlignments()[i][j].replace("general-", ""); 76switch(alignString){ // *配列は行、列の順 77case "center": 78case "right": 79rowTag += ' align="' + alignString + '"'; 80break; 81} 82rowTag += ">"; 83 84// 縦並び用の処理 85if(margeFlg == 2){ 86 87if(j ==1 && i >= 1){ 88var str = cells[i][j].toString().replace(/\n/g, "<br>"); 89if(!str){ 90rowTag += "-</" + cellTag + ">\n"; 91}else{ 92rowTag += '<a href="tel:' + str + '">' + str + '</a>' + "</td>\n"; 93} 94} 95else if(j==0 && i >= 1){ 96var companyName = cells[i][j].toString().replace(/\n/g, "<br>"); 97var url = cells[i][3].toString().replace(/\n/g, "<br>"); 98if(!url){ 99rowTag += companyName + "</td>\n"; 100}else{ 101rowTag += '<a href="' + url + '" rel="nofollow" target="_blank">' + companyName + '</a>' + "</td>\n"; 102} 103} 104else{ 105rowTag += cells[i][j].toString().replace(/\n/g, "<br>") + "</td>\n"; 106} 107rowTag += "</tr>\n"; 108 109}else{ 110// 改行を変換 111if(j ==1 && i >= 1){ 112var str = cells[i][j].toString().replace(/\n/g, "<br>"); 113if(!str){ 114rowTag += "-</" + cellTag + ">\n"; 115}else{ 116rowTag += '<a href="tel:' + str + '">' + str + '</a>' + "</td>\n"; 117} 118} 119else if(j==0 && i >= 1){ 120var companyName = cells[i][j].toString().replace(/\n/g, "<br>"); 121var url = cells[i][3].toString().replace(/\n/g, "<br>"); 122if(!url){ 123rowTag += companyName + "</td>\n"; 124}else{ 125rowTag += '<a href="' + url + '" rel="nofollow" target="_blank">' + companyName + '</a>' + "</td>\n"; 126} 127} 128else{ 129rowTag += cells[i][j].toString().replace(/\n/g, "<br>") + "</td>\n"; 130} 131} 132} 133 134if(margeFlg == 1){ 135rowTag +="</tr>\n"; 136tableTag += rowTag; 137}else{ 138tableTag += rowTag + "</tbody>\n</table>\n\n"; 139} 140} 141 142if(margeFlg == 1){ 143tableTag += "</tbody>\n</table>"; 144} 145 146Browser.msgBox(tableTag); // メッセージボックスにテーブルタグ出力 147} 148 149// シートの書式・値を全削除 150function clearSheet() { 151SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().clear(); // アクティブシートをクリア 152} 153 154// スプレッドシートのメニューに追加 155function onOpen(){ 156var ssheet = SpreadsheetApp.getActiveSpreadsheet(); 157var menu = [{name: '横並び', functionName: 'runCreateTableTag'}, 158{name: '縦並び', functionName: 'runCreateTableTagTate'}, 159]; 160ssheet.addMenu('テーブルタグ作成', menu); 161    menu = [{name: '実行', functionName: 'clearSheet'}, 162 ]; 163ssheet.addMenu('シートをクリア', menu); 164} 165

その後、元のシートに戻り「テーブルタグの作成」でテーブルタグを出力しようとしているのですが、「TypeError: undefined のメソッド「toString」を呼び出せません。」と出ます。

対処の仕方のわかる方、どうすればいいか教えて下さい。
よろしくお願いします。

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

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

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

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

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

maisumakun

2019/08/29 05:08

どんなコードを書きましたか?
menbou14

2019/08/29 05:34

コピペすればいいと言われて・・・ -------------------------コードここから----------------------------- // テーブルタグ作成関数を実行(セル結合あり) // テーブルタグ作成関数を実行(横並び) function runCreateTableTag() { createTableTag(1); } // テーブルタグ作成関数を実行(縦並び) function runCreateTableTagTate() { createTableTag(2); } // テーブルタグ作成関数 function createTableTag(margeFlg) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // アクティブシート var range = sheet.getDataRange(); // データのある範囲 var numRows = range.getNumRows(); // データのある行数 var numCols = range.getNumColumns(); // データのある列数 var cells = range.getValues(); // データの配列 var tableTag = ''; var tableHead = '<table class="dsc2item col4" cellspacing="1">\\n<tbody>\\n'; var tableHead2 = '<table class="dsc2item col4" cellspacing="1" style="margin-bottom: 15px">\\n<tbody>\\n'; var arrayTH = []; // テーブルタグ roopline: for(var i = 0; i < numRows; i++){ var rowTag = ""; // 縦並び用の処理 if(margeFlg == 2){ rowTag = tableHead2 + "<tr>"; }else{ if(i == 0){ tableTag = tableHead; } rowTag = "<tr>"; } for(var j = 0; j < numCols; j++){ if(j == 3){ continue; } var margeString = ""; // 背景色でタグを設定 var cellTag = ""; if(range.getBackgroundColors()[i][j] === "#ffffff"){ // セルの背景が白色の場合 *配列は行、列の順 cellTag = "td" }else{ cellTag = 'td style="background-color:' + range.getBackgroundColors()[i][j] + '"'; } // 縦並び用の処理 if(margeFlg == 2){ if(i == 0){ for(var x = 0; x < numCols; x++){ var Head = ''; Head = cells[i][x].toString().replace(/\n/g, "<br>") + "</td>"; arrayTH[x] = "<" + cellTag + ' style="max-width: 200px">' + Head; } rowTag = ''; continue roopline; }else if(i >= 1){ if(j >= 1){ rowTag += "<tr>" + arrayTH[j]; }else{ rowTag += arrayTH[j]; } } } rowTag += "<" + cellTag + margeString; // セルの結合も設定 // 文字寄せ var alignString = range.getHorizontalAlignments()[i][j].replace("general-", ""); switch(alignString){ // *配列は行、列の順 case "center": case "right": rowTag += ' align="' + alignString + '"'; break; } rowTag += ">"; // 縦並び用の処理 if(margeFlg == 2){ if(j ==1 && i >= 1){ var str = cells[i][j].toString().replace(/\n/g, "<br>"); if(!str){ rowTag += "-</" + cellTag + ">\\n"; }else{ rowTag += '<a href="tel:' + str + '">' + str + '</a>' + "</td>\\n"; } } else if(j==0 && i >= 1){ var companyName = cells[i][j].toString().replace(/\n/g, "<br>"); var url = cells[i][3].toString().replace(/\n/g, "<br>"); if(!url){ rowTag += companyName + "</td>\\n"; }else{ rowTag += '<a href="' + url + '" rel="nofollow" target="_blank">' + companyName + '</a>' + "</td>\\n"; } } else{ rowTag += cells[i][j].toString().replace(/\n/g, "<br>") + "</td>\\n"; } rowTag += "</tr>\\n"; }else{ // 改行を変換 if(j ==1 && i >= 1){ var str = cells[i][j].toString().replace(/\n/g, "<br>"); if(!str){ rowTag += "-</" + cellTag + ">\\n"; }else{ rowTag += '<a href="tel:' + str + '">' + str + '</a>' + "</td>\\n"; } } else if(j==0 && i >= 1){ var companyName = cells[i][j].toString().replace(/\n/g, "<br>"); var url = cells[i][3].toString().replace(/\n/g, "<br>"); if(!url){ rowTag += companyName + "</td>\\n"; }else{ rowTag += '<a href="' + url + '" rel="nofollow" target="_blank">' + companyName + '</a>' + "</td>\\n"; } } else{ rowTag += cells[i][j].toString().replace(/\n/g, "<br>") + "</td>\\n"; } } } if(margeFlg == 1){ rowTag +="</tr>\\n"; tableTag += rowTag; }else{ tableTag += rowTag + "</tbody>\\n</table>\\n\\n"; } } if(margeFlg == 1){ tableTag += "</tbody>\\n</table>"; } Browser.msgBox(tableTag); // メッセージボックスにテーブルタグ出力 } // シートの書式・値を全削除 function clearSheet() { SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().clear(); // アクティブシートをクリア } // スプレッドシートのメニューに追加 function onOpen(){ var ssheet = SpreadsheetApp.getActiveSpreadsheet(); var menu = [{name: '横並び', functionName: 'runCreateTableTag'}, {name: '縦並び', functionName: 'runCreateTableTagTate'}, ]; ssheet.addMenu('テーブルタグ作成', menu);     menu = [{name: '実行', functionName: 'clearSheet'},  ]; ssheet.addMenu('シートをクリア', menu); } ------------------------------ここまで------------------------ 本当に、よろしくお願いします!
guest

回答2

0

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

解決方法は、教えてもらったサイトのコードを貼り付けたらできました。

投稿2019/08/30 00:07

menbou14

総合スコア17

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

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

0

ベストアンサー

今回エラーになる理由としてはcellsの部分でijx3のいずれかがcellsの範囲外になっている事が考えられます。
そちらを対処できればエラーが無くなるのではないでしょうか。

また、コピペと恐らく同じ方が書いたコードを見つけました。参考URL
コードをしっかり読んでないのでわからない、また質問者様がどのような事をしたいのかわからないですが、こちらで代用出来る物ではないでしょうか。

なお、質問される場合はエラー内容だけでなく、スプレッドシートの内容や、ソースコード、また何をしたいのかを事前に記載していただけると、回答に繋がる可能性が高いかと思います。
今からでも遅くは無いので質問を修正する事をオススメします。

投稿2019/08/29 06:31

rhodi

総合スコア31

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

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

menbou14

2019/08/29 20:53

アドバイス、ありがとうございます! 早速、修正しておきます。 参考URLなど、本当にありがとうございます! アドバイスをもとに、対処してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問