グーグルスプレッドで表を出力しようとすると、「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」を呼び出せません。」と出ます。
対処の仕方のわかる方、どうすればいいか教えて下さい。
よろしくお願いします。
どんなコードを書きましたか?
コピペすればいいと言われて・・・
-------------------------コードここから-----------------------------
// テーブルタグ作成関数を実行(セル結合あり)
// テーブルタグ作成関数を実行(横並び)
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);
}
------------------------------ここまで------------------------
本当に、よろしくお願いします!
回答2件
あなたの回答
tips
プレビュー