質問編集履歴

3 修正

MON5277

MON5277 score 22

2017/03/16 02:46  投稿

GAS(google apps script)で一つのスプレッドシート内にある複数のスクリプトの挙動に関して
GASに詳しい方、教えていただけますと助かります。
表題の件、一つのスプレッドシートに対してスクリプトが複数あってそれぞれに同じトリガーを設定している場合、そのトリガーが入った時にどれか一つしか実行していないような気がするのですが、気のせいでしょうか?スクリプト自体は個別に走らせるとちゃんと機能しています。
ちなみにスクリプトは4つ、トリガーはform送信時 の設定です。
```google apss script
//スクリプト1
function sendMailForm() //メール送信
{
   Logger.log('sendMailForm() debug start');
   var subject = "【注文】 / ";
   
   var body
       = "注文内容\n\n"
       + "------------------------------------------------------------\n";
   
   var footer
       = "------------------------------------------------------------\n\n"
       + "納期連絡よろしくお願いします。";
   var SUBJ_COL_NAME = '件名';
   var SNDR_COL_NAME = 'ユーザー名';
   var EXCLUDE_COLS = ['ユーザー名','タイムスタンプ','ステータス'];
   var admin = "<管理者メールアドレス>";
   var to = "<送信先メールアドレス>";
   var from = "SNDR_COL_NAME";
   var spread_sheet_id = '<スプレッドシートID>';
   try{
       var ss  = SpreadsheetApp. openById(spread_sheet_id);
       var sh  = ss.getActiveSheet();
       var rows = sh.getLastRow();
       var cols = sh.getLastColumn();
       var rg  = sh.getDataRange();
       Logger.log("rows="+rows+" cols="+cols);
       for ( var j = 1; j <= cols; j++ ) {
           var col_name = rg.getCell(1, j).getValue();
           var col_value = rg.getCell(rows, j).getValue();
           
         if ( col_name === SUBJ_COL_NAME ) {
               subject += col_value;
           }
         if ( col_name === SNDR_COL_NAME ) {
               from = col_value;
           }
         if ( EXCLUDE_COLS.length > 0 ) {
               is_exclude = false;
               for ( var k = 0; k < EXCLUDE_COLS.length; k++ ) {
                   if ( col_name === EXCLUDE_COLS[k] ) {
                       is_exclude = true;
                       break;
                   }
               }
               if ( is_exclude ) {
                   // 除外カラムなのでスキップ
                   continue;
               }
           }
           
           // メール本文に追加
           body += "【"+col_name+"】\n";
           body += col_value + "\n\n";
       }
       body += footer;
 
       // 送信先オプション
       var options = {};
       if ( from ) options.replyTo = from ;
       // メール送信
       if ( to ) {
           MailApp.sendEmail(to, subject, body, options);
       }else{
           MailApp.sendEmail(from, "【失敗】Googleフォームにメールアドレスが指定されていません", body);
       }
       
       // 連続で送るとエラーになるので1秒スリープ
       Utilities.sleep(1000);
       
       MailApp.sendEmail(admin, subject, body, options);
       
   }catch(e){
       MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message);
   }
}
//スクリプト2
function sort(){ //降順で並び替え
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sh = ss.getActiveSheet();
   var range = sh.getRange("A2:G");
   range.sort([{column: 1, ascending: false}]); //列1(A)を基準に 降順で並び替え
}
//スクリプト3
function color(){ //背景色を一行おきに色を付ける
 var sheet = SpreadsheetApp.getActiveSheet();
 var numColumns = sheet.getLastColumn();
 for(var i=1;i<=sheet.getLastRow();i++){
   if(i%2==0){     
     sheet.getRange(i, 1, 1, numColumns).setBackground('#F0F8FF');   
   }else{
     sheet.getRange(i, 1, 1, numColumns).setBackground('#FFFFFF');   
   }
 }
}
//スクリプト4
function VerticalAlignment(){ //文字の配置を上詰めにする
var sh = SpreadsheetApp.getActiveSheet();
var rng = sh.getRange("A2:Y");
rng.setVerticalAlignment("TOP");
}
```
  • Google Apps Script

    2614 questions

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

2 間違い修正

MON5277

MON5277 score 22

2017/03/16 02:07  投稿

GAS(google apps script)で一つのスプレッドシート内にある複数のスクリプトの挙動に関して
GASに詳しい方、教えていただけますと助かります。
表題の件、一つのスプレッドシートに対してスクリプトが複数あってそれぞれに同じトリガーを設定している場合、そのトリガーが入った時にどれか一つしか実行していないような気がするのですが、気のせいでしょうか?スクリプト自体は個別に走らせるとちゃんと機能しています。
ちなみにスクリプトは4つ、トリガーはform送信時 の設定です。
スクリプト1にはトリガーを設けておりません。  
```google apss script
//スクリプト1
function sendMailForm() //メール送信
{
   Logger.log('sendMailForm() debug start');
   var subject = "【注文】 / ";
   
   var body
       = "注文内容\n\n"
       + "------------------------------------------------------------\n";
   
   var footer
       = "------------------------------------------------------------\n\n"
       + "納期連絡よろしくお願いします。";
   var SUBJ_COL_NAME = '件名';
   var SNDR_COL_NAME = 'ユーザー名';
   var EXCLUDE_COLS = ['ユーザー名','タイムスタンプ','ステータス'];
   var admin = "<管理者メールアドレス>";
   var to = "<送信先メールアドレス>";
   var from = "SNDR_COL_NAME";
   var spread_sheet_id = '<スプレッドシートID>';
   try{
       var ss  = SpreadsheetApp. openById(spread_sheet_id);
       var sh  = ss.getActiveSheet();
       var rows = sh.getLastRow();
       var cols = sh.getLastColumn();
       var rg  = sh.getDataRange();
       Logger.log("rows="+rows+" cols="+cols);
       for ( var j = 1; j <= cols; j++ ) {
           var col_name = rg.getCell(1, j).getValue();
           var col_value = rg.getCell(rows, j).getValue();
           
         if ( col_name === SUBJ_COL_NAME ) {
               subject += col_value;
           }
         if ( col_name === SNDR_COL_NAME ) {
               from = col_value;
           }
         if ( EXCLUDE_COLS.length > 0 ) {
               is_exclude = false;
               for ( var k = 0; k < EXCLUDE_COLS.length; k++ ) {
                   if ( col_name === EXCLUDE_COLS[k] ) {
                       is_exclude = true;
                       break;
                   }
               }
               if ( is_exclude ) {
                   // 除外カラムなのでスキップ
                   continue;
               }
           }
           
           // メール本文に追加
           body += "【"+col_name+"】\n";
           body += col_value + "\n\n";
       }
       body += footer;
 
       // 送信先オプション
       var options = {};
       if ( from ) options.replyTo = from ;
       // メール送信
       if ( to ) {
           MailApp.sendEmail(to, subject, body, options);
       }else{
           MailApp.sendEmail(from, "【失敗】Googleフォームにメールアドレスが指定されていません", body);
       }
       
       // 連続で送るとエラーになるので1秒スリープ
       Utilities.sleep(1000);
       
       MailApp.sendEmail(admin, subject, body, options);
       
   }catch(e){
       MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message);
   }
}
//スクリプト2
function sort(){ //降順で並び替え
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sh = ss.getActiveSheet();
   var range = sh.getRange("A2:G");
   range.sort([{column: 1, ascending: false}]); //列1(A)を基準に 降順で並び替え
}
//スクリプト3
function color(){ //背景色を一行おきに色を付ける
 var sheet = SpreadsheetApp.getActiveSheet();
 var numColumns = sheet.getLastColumn();
 for(var i=1;i<=sheet.getLastRow();i++){
   if(i%2==0){     
     sheet.getRange(i, 1, 1, numColumns).setBackground('#F0F8FF');   
   }else{
     sheet.getRange(i, 1, 1, numColumns).setBackground('#FFFFFF');   
   }
 }
}
//スクリプト4
function VerticalAlignment(){ //文字の配置を上詰めにする
var sh = SpreadsheetApp.getActiveSheet();
var rng = sh.getRange("A2:Y");
rng.setVerticalAlignment("TOP");
}
```
  • Google Apps Script

    2614 questions

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

1 実際のプログラムを記載しました。

MON5277

MON5277 score 22

2017/03/16 01:42  投稿

GAS(google apps script)で一つのスプレッドシート内にある複数のスクリプトの挙動に関して
GASに詳しい方、教えていただけますと助かります。
表題の件、一つのスプレッドシートに対してスクリプトが複数あってそれぞれに同じトリガーを設定している場合、そのトリガーが入った時にどれか一つしか実行していないような気がするのですが、気のせいでしょうか?スクリプト自体は個別に走らせるとちゃんと機能しています。
ちなみにスクリプトは4つ、トリガーはform送信時 の設定です。
ちなみにスクリプトは4つ、トリガーはform送信時 の設定です。
スクリプト1にはトリガーを設けておりません。
```google apss script
//スクリプト1
function sendMailForm() //メール送信
{
   Logger.log('sendMailForm() debug start');
   var subject = "【注文】 / ";
   
   var body
       = "注文内容\n\n"
       + "------------------------------------------------------------\n";
   
   var footer
       = "------------------------------------------------------------\n\n"
       + "納期連絡よろしくお願いします。";
   var SUBJ_COL_NAME = '件名';
   var SNDR_COL_NAME = 'ユーザー名';
   var EXCLUDE_COLS = ['ユーザー名','タイムスタンプ','ステータス'];
   var admin = "<管理者メールアドレス>";
   var to = "<送信先メールアドレス>";
   var from = "SNDR_COL_NAME";
   var spread_sheet_id = '<スプレッドシートID>';
   try{
       var ss  = SpreadsheetApp. openById(spread_sheet_id);
       var sh  = ss.getActiveSheet();
       var rows = sh.getLastRow();
       var cols = sh.getLastColumn();
       var rg  = sh.getDataRange();
       Logger.log("rows="+rows+" cols="+cols);
       for ( var j = 1; j <= cols; j++ ) {
           var col_name = rg.getCell(1, j).getValue();
           var col_value = rg.getCell(rows, j).getValue();
           
         if ( col_name === SUBJ_COL_NAME ) {
               subject += col_value;
           }
         if ( col_name === SNDR_COL_NAME ) {
               from = col_value;
           }
         if ( EXCLUDE_COLS.length > 0 ) {
               is_exclude = false;
               for ( var k = 0; k < EXCLUDE_COLS.length; k++ ) {
                   if ( col_name === EXCLUDE_COLS[k] ) {
                       is_exclude = true;
                       break;
                   }
               }
               if ( is_exclude ) {
                   // 除外カラムなのでスキップ
                   continue;
               }
           }
           
           // メール本文に追加
           body += "【"+col_name+"】\n";
           body += col_value + "\n\n";
       }
       body += footer;
 
       // 送信先オプション
       var options = {};
       if ( from ) options.replyTo = from ;
       // メール送信
       if ( to ) {
           MailApp.sendEmail(to, subject, body, options);
       }else{
           MailApp.sendEmail(from, "【失敗】Googleフォームにメールアドレスが指定されていません", body);
       }
       
       // 連続で送るとエラーになるので1秒スリープ
       Utilities.sleep(1000);
       
       MailApp.sendEmail(admin, subject, body, options);
       
   }catch(e){
       MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message);
   }
}
//スクリプト2
function sort(){ //降順で並び替え
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sh = ss.getActiveSheet();
   var range = sh.getRange("A2:G");
   range.sort([{column: 1, ascending: false}]); //列1(A)を基準に 降順で並び替え
}
//スクリプト3
function color(){ //背景色を一行おきに色を付ける
 var sheet = SpreadsheetApp.getActiveSheet();
 var numColumns = sheet.getLastColumn();
 for(var i=1;i<=sheet.getLastRow();i++){
   if(i%2==0){     
     sheet.getRange(i, 1, 1, numColumns).setBackground('#F0F8FF');   
   }else{
     sheet.getRange(i, 1, 1, numColumns).setBackground('#FFFFFF');   
   }
 }
}
//スクリプト4
function VerticalAlignment(){ //文字の配置を上詰めにする
 var sh = SpreadsheetApp.getActiveSheet();
 var rng = sh.getRange("A2:Y");
 rng.setVerticalAlignment("TOP");
}
```
  • Google Apps Script

    2614 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る