Google脚本:电子表格

时间:2016-12-05 07:10:12

标签: javascript google-apps-script

我是脚本编程的初学者,目前我正在尝试在Google脚本上完成一个自动发送电子邮件系统,该系统会根据电子表格给出的数字发送电子邮件(计算剩余天数直到指定的发送日期)。

通过引用电子表格中的数字(左侧),我可以设法通过匹配列所保持的数字和我指定的数字来指定列。 (在这种情况下是“7”)。

之后,我想通过先引用前面的列号并使用“for”查看列中的行来查找所需数据,从前面指定的列中获取行数或数据。 (在这种情况下为“1”)

我可以设法解决这个问题,但它处理速度超慢...... 我一直在寻找解决方案,但无法弄明白。

如果您与我分享任何解决方案的想法,那将非常感激。 我尝试的脚本如下。

    function AutoSend() {     
      // Get the spreadsheet
      var book = SpreadsheetApp.getActiveSpreadsheet();

      // Get cal      
      var Calsheet = book.getSheetByName("cal");

      //=========================================================//       
      // Get data range that contains data     
      var CaldatRange = Calsheet.getDataRange();

      //=========================================================//     
      // Get the row number of Cal to process      
      var CalnumRows = CaldatRange.getNumRows();

      // Get the column number of Cal to process     
      var CalnumCols = CaldatRange.getNumColumns();

      //=========================================================//        
      // Get the number of column to start to process   
      var Cstart = Calsheet.getRange(6, 5).getValue();

     //=========================================================//       

var coldata  = [];

var rowdata  = [];

for (var j = Cstart;j <= CalnumCols;j++){

var colnumfind = Calsheet.getRange(6, j).getColumn();

var status     = Calsheet.getRange(3, j).getValue();

var dayLeft    = Calsheet.getRange(4, j).getValue();

var Sdate      = Calsheet.getRange(5, j).getValue(); 

    if(dayLeft == "7" && status == "未送信")
    {
      Browser.msgBox("確認",colnumfind, Browser.Buttons.OK);
      coldata = colnumfind;
      for (var i = 6; i <= CalnumRows; i++)
      {
        var sendOK     = Calsheet.getRange(i,coldata).getValue();
        var rownumfind = Calsheet.getRange(i, coldata).getRow();

        if(sendOK == "1")
        {
          rowdata   = rownumfind;
          var email = Calsheet.getRange(rowdata,3).getValue();
          Browser.msgBox("確認","found it : Row " + rowdata +", Column "+ coldata + " " + email, Browser.Buttons.OK); 
          //PUT SEND EMAIL FUNCTION
        }

      }
      Calsheet.getRange(3,coldata).setValue("送信済");
    }
  } 
}

1 个答案:

答案 0 :(得分:0)

首先使用CaldatRange.getValues(),这是一个例子:

var values = CaldatRange.getValues();

for (var j = Cstart-1;j < CalnumCols;j++){
var status     = values[2][j];
var dayLeft    = values[3][j];
var Sdate      = values[4][j]; 
var colnumfind = j+1;

你也可以改变这些:

var sendOK     = values[i-1,coldata]
var rownumfind = i;

var email = values[i-1,2];

这将消除所有getValue调用。