我在Google表格的单元格A1中有一个IMPORTDATA公式,名为“ test-r”,我希望能够以特定的时间间隔(从几秒到几小时不等)更新单元格。
经过大量研究,我找到了this suggestion in a previous post,但是我并没有取得多大成功。
这是我修改工作表/标签名称为“ test-r”的单元格A1中IMPORTDATA公式的那篇文章中的脚本的方式
function forceEval(sheetName, Row, Col){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("test-r");
var orig = sheet.getRange(1,1).getFormula();
var temp = orig.replace("=", "?");
sheet.getRange(row,col).setFormula(temp);
SpreadsheetApp.flush();
sheet.getRange(row,col).setFormula(orig);
}
function onEdit(e){
forceEval("test-r", 1, 1)
}
这对我来说一定是“操作员错误”,我是新来的。
同时,我不知道是否有更简单的脚本可以实现我的目标。
任何帮助将不胜感激。
答案 0 :(得分:0)
如果我的理解是正确的,那么该修改如何?
当以上几点反映到您的脚本中时,它如下所示。
function forceEval(){ // Modified
var sheetName = "test-r";
var cell = "A1";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sheetName); // Modified
var orig = sheet.getRange(cell).getFormula(); // Modified
var temp = orig.replace("=", "?");
sheet.getRange(cell).setFormula(temp); // Modified
SpreadsheetApp.flush();
sheet.getRange(cell).setFormula(orig); // Modified
}
forceEval()
的功能,请安装时间驱动的触发器。#NAME?
会立即显示。如果您不想这样做,那么下面的示例脚本怎么样?function forceEval(){
var sheetName = "test-r";
var cell = "A1";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = ss.getSheetByName(sheetName).getRange(cell);
var formula = range.getFormula();
range.clearContent();
SpreadsheetApp.flush();
range.setFormula(formula);
}
为了安装时间驱动的触发器,you can manually install it。
还可以使用脚本进行安装。以下脚本为forceEval
的功能安装时间驱动的触发器。在此示例脚本中,运行setTrigger()
时,每10分钟运行一次forceEval()
的功能。这样,单元格“ A1”的公式每10分钟更新一次。
function setTrigger() {
var minutes = 10; // In this case, as a sample value, it's 10 minutes.
var functionName = "forceEval";
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == functionName && triggers[i].getTriggerSource() == ScriptApp.TriggerSource.CLOCK) {
ScriptApp.deleteTrigger(triggers[i]);
}
}
ScriptApp.newTrigger(functionName).timeBased().everyMinutes(minutes).create();
}
如果我误解了您的问题,而这不是您想要的方向,我深表歉意。