我是脚本编程的初学者,目前我正在尝试在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("送信済");
}
}
}
答案 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调用。