【发布时间】:2022-08-06 15:02:25
【问题描述】:
该脚本在 Google Sheet 中用于通过在扫描表大小(行数和列数)后使用 flush 来触发股票代码监视列表更新。目前,使用 Google Sheet Time-Driven trigger 每分钟只能运行一次。有没有办法让它每 10 秒刷新和更新一次以绕过时间驱动的触发器限制?
感谢任何可以帮助的人~
function forceRefreshSheetFormulas(sheetName) {
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = activeSpreadsheet.getSheetByName(\'*Table Name*\');
var range = sheet.getDataRange();
var numCols = range.getNumColumns();
var numRows = range.getNumRows();
var rowOffset = range.getRow();
var colOffset = range.getColumn();
// Change formulas then change them back to refresh it
var originalFormulas = range.getFormulas();
//Loop through each column and each row in the sheet
//`row` and `col` are relative to the range, not the sheet
var ranges = []
var blank = []
var original = []
for (row = 0; row < numRows; row++) {
for (col = 0; col < numCols; col++) {
if (originalFormulas[row][col] != \"\"){
ranges.push( `\'*Table Name*\'!${columnToLetter(col + colOffset)}${row + rowOffset}` )
blank.push(\'\')
original.push(`${originalFormulas[row][col]}`)
};
}
};
updateGoogleSheet(ranges,blank)
SpreadsheetApp.flush();
updateGoogleSheet(ranges,original)
};
function updateGoogleSheet(ranges,values) {
var spreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId()
var data = ranges.map((e, i) => ({ range: e, values: [[values[i]]] }));
Sheets.Spreadsheets.Values.batchUpdate({ data, valueInputOption: \"USER_ENTERED\" }, spreadsheetId);
}
function columnToLetter(column) {
var temp, letter = \'\';
while (column > 0) {
temp = (column - 1) % 26;
letter = String.fromCharCode(temp + 65) + letter;
column = (column - temp - 1) / 26;
}
return letter;
}
-
您可以通过浏览器使用 google.script.run 从 setInterval 函数触发,但只要交换处于打开状态,您就必须将浏览器留在该页面上,并确保禁用空白屏幕。
-
嗨库珀,你介意告诉我我应该把它放在脚本中的哪个位置是最佳位置吗?非常感谢您的回复!
-
对话框或侧边栏中的任何位置,以便它在浏览器中而不是在服务器上运行。我会把它当作纯 javascript 来做。
-
嗨 Cooper,首先,很抱歉我没有提到我不是程序员。所以当涉及到这种设置时,有很多我不熟悉的东西。该脚本来自此处的另一个用户。你介意帮我优化一下代码,让它像每 10 秒循环一次吗?再次非常感谢您!
-
我将在这里补充一点,Google 表格对每个帐户每天的总脚本运行时间有限制。最后我检查了它是 6 小时(尽管它最近可能增加了,因为我看到每个电子表格的最大单元数刚刚从 5M 增加到 10M)。但是,如果您想全天候每 10 秒运行一次触发脚本,那必须是只要在所有电子表格中的整个帐户上运行的脚本;即便如此,每次执行脚本的运行时间也需要少于 2.5 秒。所以浏览器级别可能是您唯一的选择。
标签: google-apps-script google-sheets