Google apps script 如何在同一电子表格中的多个工作表上自动运行google脚本
我有以下几点 情况: 我有一个电子表格,有10个工作表,15个用户登录并修改它 脚本函数: 在特定列中插入activesheet中两天之间的天数, 脚本比较第J列和第TodayDay列中的日期,并在第F列中插入差异 问题: 我无法使用定时触发器运行此脚本。我想为并发工作表每15分钟运行一次此脚本 测试用例: 只有在电子表格中只有一张工作表时,触发器才会定时运行。 如果我有多张工作表,则触发器不会随时间运行。 如果我将同一个触发器设置为OneEdit,则触发器仅对多个工作表运行 我需要每15分钟为所有工作表或活动工作表运行此脚本,因为我还有两个脚本运行OnEdit。当我在OneEdit中设置此脚本时,电子表格将缓慢地旋转Google apps script 如何在同一电子表格中的多个工作表上自动运行google脚本,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有以下几点 情况: 我有一个电子表格,有10个工作表,15个用户登录并修改它 脚本函数: 在特定列中插入activesheet中两天之间的天数, 脚本比较第J列和第TodayDay列中的日期,并在第F列中插入差异 问题: 我无法使用定时触发器运行此脚本。我想为并发工作表每15分钟运行一次此脚本 测试用例: 只有在电子表格中只有一张工作表时,触发器才会定时运行。 如果我有多张工作表,则触发器不会随时间运行。 如果我将同一个触发器设置为OneEdit,则触发器仅对多个工作表运行 我需要每15分钟为
function onOpen() {
var menuEntries = [ {name: "UpdateAge", functionName: "toTrigger"},
];
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.addMenu("Tools",menuEntries);//
}
// create a timer trigger that will call "toTrigger" every 15 minutes
function toTrigger(){
var sh = SpreadsheetApp.getActiveSheet();
var data = sh.getRange(1,1,sh.getLastRow(),sh.getLastColumn()).getValues();
for(var n=0;n<data.length;++n){
if(typeof(data[n][9])=='object'){
data[n][5]=dayToToday(data[n][9])
}
}
sh.getRange(1,1,data.length,data[0].length).setValues(data)
}
function dayToToday(x){
var refcell = x;;// get value in column A to get the reference date
var refTime = new Date(refcell);
var ref = refTime.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
var today = new Date();
var TD = today.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
var day = parseInt(TD-ref);// get the difference in days (integer value )
return day ; // return result that will be in cell
}
函数onOpen(){
var menuEntries=[{name:“UpdateAge”,functionName:“toTrigger”},
];
var ss=SpreadsheetApp.getActiveSpreadsheet();
ss.添加菜单(“工具”,菜单)//
}
//创建一个计时器触发器,每15分钟调用一次“toTrigger”
函数toTrigger(){
var sh=SpreadsheetApp.getActiveSheet();
var data=sh.getRange(1,1,sh.getLastRow(),sh.getLastColumn()).getValues();
对于(var n=0;n当函数作为触发器运行时,没有活动工作表。只有当用户打开电子表格时,活动工作表才适用。请修改脚本以使用
getSheetByName
,一切都应正常工作
如果要在多个工作表上使用此函数,只需从另一个函数调用此函数即可
function shellFunction(){
var sheets = ['sheet1','sheet2',etc];
for (var s in sheets){
toTrigger(sheets[s]);
}
}
并将toTrigger
函数更改为接收图纸名称作为参数
function toTrigger(sheetName){
var sh = SpreadsheetApp.openById(ID OF SPREADSHEET).getSheetByName(sheetName);
/* Your regular code */
}
澄清:当触发器执行时,它在服务器上作为一个完全独立的进程执行,并且不知道用户是否打开了工作表。在onEdit触发器的情况下,函数接收到一个事件,其中包含有关触发器源的信息。基于计时器的触发器不会获得这样的事件。因此,即使用户有工作表打开当基于计时器的触发器触发时,触发器功能将不知道用户正在查看哪个工作表。我希望这样:当用户登录到电子表格时,脚本应每15分钟运行一次。(注意:此脚本一次有两个以上的用户登录).1-如何使用getsheetbyName将此脚本修改为运行10张工作表?我将感谢您的帮助。Srik,您知道如何将此脚本设置为运行同一电子表格中的多张工作表吗?因为我的问题是,如果使用getsheetbyName,只需运行1张工作表。我需要每15分钟运行该脚本10张工作表。有没有办法告诉sc仅对工作表1、2、3、4、5运行以下功能?HI Srik返回错误“类型错误:无se puede llamar al método”getRange“de null.Ignorar”请参见我的编辑2013年6月13日为什么不使用电子表格功能?您可以计算每一行的日差而不必担心。请记住将参考日期和toda的日期作为函数参数发送。我不能为ex使用公式数组,因为电子表格每次都在修改中。当该行上的活动完成时,我们将删除它。
示例:如果我们使用公式,有人需要将公式拖动到新行,以避免任何错误或复杂的工作表。我使用此脚本自动插入数字,而没有任何问题。有人删除公式所在的单元格。
使用数组公式,但当您添加新行时,公式也不会使用数组自动拖动。
就我的情况而言,我无法实现一个公式。如果你有任何建议,请让我知道。
function toTrigger(sheetName){
var sh = SpreadsheetApp.openById(ID OF SPREADSHEET).getSheetByName(sheetName);
/* Your regular code */
}