在 Google Apps 脚本中触发 importHTML
Trigger importHTML in Google Apps Script
我想知道是否可以编写一个 Google Apps 脚本来触发 Google 电子表格中的每日 importhtml。例如,假设我想在每天下午 1 点导入以下 table 的更新。
=IMPORTHTML("https://en.wikipedia.org/wiki/Lubbock,_Texas","table",5)
即使我的计算机处于离线状态,我也需要这种自动检查 table 更新的功能。
谢谢
是的,可以编写一个脚本来每天复制table。
简而言之,您必须复制导入的 table 并将其粘贴到新的 Sheet 中。每次您 open/access 传播 sheet 时,ImportHTML a 都会更新。所以存储 table 的唯一方法是复制并粘贴到新的 sheet.
这是执行此操作的代码:
function getImportData()
{
var ss = SpreadsheetApp.getActive()
var sheet =ss.getSheetByName("ImportSheet")
if (sheet == null)
{
sheet = ss.insertSheet("ImportSheet")
sheet.getRange(1,1).setValue( "=IMPORTHTML(\"https://en.wikipedia.org/wiki/Lubbock,_Texas\",\"table\",5)")
}
var dataRange = sheet.getDataRange()
//waitforLoading waits for the function importHTML to finish loading the table, only a problem if table takes a while to load
//for more discussion on this visit :
var wait = waitForLoading(dataRange,sheet, 10)
var logSheet = ss.getSheetByName("ImportLogSheet")
if (logSheet == null)
{
logSheet = ss.insertSheet("ImportLogSheet")
}
var timeStampRow = []
timeStampRow[0] = new Date()
if(wait)
{
logSheet.appendRow(timeStampRow)
var lastRow = logSheet.getLastRow() + 1
var destinationRange = logSheet.getRange(lastRow,1)
dataRange.copyTo(destinationRange, {contentsOnly:true})
}
else {
timeStampRow[1] = "Scripted timeout waiting for the table to Load "
logSheet.appendRow(timeStampRow)
}
}
function waitForLoading(dataRange, sheet, maxWaitTimeInSec)
{
// This function is only required if it takes a while for the importHTML to load your data!
// if not you can skip this function
// Function looks to see if the value of the
for(i = 0; i< maxWaitTimeInSec ; i++)
{
var value = dataRange.getCell(1,1).getValue()
if(value.search("Loading") !== -1) {
Utilities.sleep(1000);
dataRange = sheet.getDataRange()
} else {
return true
}
}
return false
}
编辑: 忘记提及设置触发器。您可以使用 time-driven 触发器设置要触发的任何函数。此处提供了有关如何设置的详细信息:https://developers.google.com/apps-script/guides/triggers/installable#managing_triggers_manually
我想知道是否可以编写一个 Google Apps 脚本来触发 Google 电子表格中的每日 importhtml。例如,假设我想在每天下午 1 点导入以下 table 的更新。
=IMPORTHTML("https://en.wikipedia.org/wiki/Lubbock,_Texas","table",5)
即使我的计算机处于离线状态,我也需要这种自动检查 table 更新的功能。 谢谢
是的,可以编写一个脚本来每天复制table。 简而言之,您必须复制导入的 table 并将其粘贴到新的 Sheet 中。每次您 open/access 传播 sheet 时,ImportHTML a 都会更新。所以存储 table 的唯一方法是复制并粘贴到新的 sheet.
这是执行此操作的代码:
function getImportData()
{
var ss = SpreadsheetApp.getActive()
var sheet =ss.getSheetByName("ImportSheet")
if (sheet == null)
{
sheet = ss.insertSheet("ImportSheet")
sheet.getRange(1,1).setValue( "=IMPORTHTML(\"https://en.wikipedia.org/wiki/Lubbock,_Texas\",\"table\",5)")
}
var dataRange = sheet.getDataRange()
//waitforLoading waits for the function importHTML to finish loading the table, only a problem if table takes a while to load
//for more discussion on this visit :
var wait = waitForLoading(dataRange,sheet, 10)
var logSheet = ss.getSheetByName("ImportLogSheet")
if (logSheet == null)
{
logSheet = ss.insertSheet("ImportLogSheet")
}
var timeStampRow = []
timeStampRow[0] = new Date()
if(wait)
{
logSheet.appendRow(timeStampRow)
var lastRow = logSheet.getLastRow() + 1
var destinationRange = logSheet.getRange(lastRow,1)
dataRange.copyTo(destinationRange, {contentsOnly:true})
}
else {
timeStampRow[1] = "Scripted timeout waiting for the table to Load "
logSheet.appendRow(timeStampRow)
}
}
function waitForLoading(dataRange, sheet, maxWaitTimeInSec)
{
// This function is only required if it takes a while for the importHTML to load your data!
// if not you can skip this function
// Function looks to see if the value of the
for(i = 0; i< maxWaitTimeInSec ; i++)
{
var value = dataRange.getCell(1,1).getValue()
if(value.search("Loading") !== -1) {
Utilities.sleep(1000);
dataRange = sheet.getDataRange()
} else {
return true
}
}
return false
}
编辑: 忘记提及设置触发器。您可以使用 time-driven 触发器设置要触发的任何函数。此处提供了有关如何设置的详细信息:https://developers.google.com/apps-script/guides/triggers/installable#managing_triggers_manually