Google apps script 脚本自动运行时查询导入范围未更新-加载错误
我有一个脚本来粘贴通过电子邮件收到的csv的原始数据。当原始数据粘贴到工作表上时,我希望另一个带有查询导入范围公式的工作表会自动更新新数据 我有第二个脚本从数据透视表中读取数据,数据透视表来自具有这些公式的工作表。但是,当它尝试从透视表读取数据时,我得到一个错误异常:该范围内的行数必须至少为1。。这是因为我的变量numRows等于零 当我手动打开g-doc时,我在工作表上看到一个错误,公式如下:错误加载。 然而,在我打开gdoc的几秒钟之后,范围几乎立即更新,没有任何问题,如果我在这之后手动运行脚本,它运行起来就没有任何问题 如何确保在更新原始数据后,公式不会因错误加载而受阻?我想自动运行脚本,而不是手动运行。任何提示都是非常受欢迎的 注:Google apps script 脚本自动运行时查询导入范围未更新-加载错误,google-apps-script,google-sheets-formula,Google Apps Script,Google Sheets Formula,我有一个脚本来粘贴通过电子邮件收到的csv的原始数据。当原始数据粘贴到工作表上时,我希望另一个带有查询导入范围公式的工作表会自动更新新数据 我有第二个脚本从数据透视表中读取数据,数据透视表来自具有这些公式的工作表。但是,当它尝试从透视表读取数据时,我得到一个错误异常:该范围内的行数必须至少为1。。这是因为我的变量numRows等于零 当我手动打开g-doc时,我在工作表上看到一个错误,公式如下:错误加载。 然而,在我打开gdoc的几秒钟之后,范围几乎立即更新,没有任何问题,如果我在这之后手动运行
=QUERY(IMPORTRANGE(“1OpF8gcrV1Yj8bYP1j5PsHM4VRw2pKZOUmJf6VxGeFdY”,“原始数据!A2:G”),“选择Col1、Col2、Col3、Col4、Col5、Col6、Col7,其中Col2不是Col4 asc、Col1 asc、Col5 asc的空顺序”,0)
IMPORTHTML
,IMPORTRANGE
等一直是许多关于自动更新的问题的主题-这种方法通常看起来相当脆弱。我在任何地方都找不到它的文档,但我怀疑这些函数在关闭时会停止计算。或者,如果发生了重新计算,由于某种原因,它们没有被授权,因为它们不再链接到用户会话
这就是说,尽管我没有使用这种方法,但我已经多次测试过它,它似乎对我有效,尽管我知道有很多人并不适用
有些人发现,通过取消所有保护措施并公开表格可以消除错误,尽管根据我的经验,最好是从等式中删除公式(没有双关语)
建议修复
在邮件>应用程序脚本>工作表>公式>工作表的链中
将其更改为Mail>Apps Script>Sheet>Apps Script>Sheet
我没有要测试的源数据,但要在应用程序中实现查询,脚本如下所示:
const ss=SpreadsheetApp.openById(“您的ID”);
const dataRange=ss.getSheetByName(“Sheet1”).getRange(“A2:G”);
const data=dataRange.getValues()
常量filteredData=data.filter(行=>行[1]!==“”)
一旦数据与脚本一起导入,就可以使用公式对数据进行排序
TLDR:链接
IMPORTRANGE
有时可能有效,但它似乎不太可靠。在我看来,现在最好将所有内容都转移到应用程序脚本中。非常感谢@iansedano!我很想给你积极的反馈,但由于我最近才进入这个平台,所以目前无法给你反馈。我将来会给你的。改变进口范围实际上是可行的,但正如你所说的,似乎不那么可靠。我将尝试更改应用程序脚本中的公式。没关系@JCVLC,如果您愿意,您仍然可以通过按✓ 我的答案旁边的按钮。如果你有兴趣,也可以去看看
function sending_emails(){
var ss=SpreadsheetApp.openById("1OpF8gcrV1Yj8bYP1j5PsHM4VRw2pKZOUmJf6VxGeFdY");
var today = new Date();
if(today.getDay() != 6 && today.getDay() != 0){
//Sending emails to reps:
var data_sheet = ss.getSheetByName("Copy of sending_emails");
var aux = data_sheet.getRange("B3:B").getValues();
var startRow = 3; // First row of data to process
var numRows = aux.filter(String).length;
Logger.log('numRows' + numRows);
// Fetch the range of cells
var dataRange = data_sheet.getRange(startRow, 1, numRows, 5); //I get the error here because startRow = 3 and I get numRows = 0
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (var a in data) {
var row = data[a];
var message = row[3];
var emailAddress = row[0];
Logger.log('emailAddress'+ emailAddress);
MailApp.sendEmail({
to: emailAddress,
subject: 'Task Manager',
htmlBody: message,
cc: row[4]
});
}
}
}