我正在Google表格的一个工作表中的大型数据集上搜索关键字。我只需要在这个大数据集的一列中进行搜索。 在先前创建的TextFinder实例上执行搜索[findNext()]的那一行失败了。
我通过添加Logger.log条目并以return false;停止函数的执行来进行逐行调试。 它将在findNext()函数处停止执行,并显示错误“服务错误”。我以前遇到过这个错误,它发生在对电子表格类进行太多调用而没有更新时发生的,解决方案是在此处和此处包含一些SpreadsheetApp.flush()语句以清除一些缓冲区。我在findNext()之前和之后都无济于事。当然,当我在findNext之前刷新时它运行正常,但是随后它再次在findNext处停止,如果我将它放在findNext之后,它将永远无法刷新。
function searchByZipCode() {
var sheetSample1 = SpreadsheetApp.getActiveSheet();
var rangeAllZIPs = sheetSample1.getRange("C:C"); // 13,165 rows in this range
var textFinderResults = rangeAllZIPs.createTextFinder("10550");
var strCounties = [];
while (true) {
var rangeThisZip = textFinderResults.findNext(); // Service error!
if (rangeThisZip) {
strCounties.push(sheetSample1.getRange(rangeThisZip.getRowIndex(), 1).getValue());
} else {
break;
}
}
strCounties.forEach(function (Item, Index) {
Logger.log("Counties \[" + Index + "\]\: " + Item);
});
}
在C列中查找我要搜索的文本,并向我提供该电子表格中A列的值。
在findNext()函数上执行大约10至15秒时出现错误消息。
不幸的是,由于我的网络存在安全限制,我无法提供电子表格的示例,但是如果您的电子表格包含13,165行且只有两或三列,那么假设A列的县列表为两字母在B列中列出,并在C列中找到相应的邮政编码。
答案 0 :(得分:1)
如果我的理解正确,那么这个答案如何?
在我的环境中,当findNext()
和findAll()
中使用TextFinder
和getRange("C:C")
时,我可以确认是否发生了相同的问题。但是,当getRange("C1:C")
和findNext()
用于从findAll()
和TextFinder
检索的getRange(1, 3, sheetSample1.getLastRow(), 1)
时,不会发生错误。从这种情况来看,我认为这可能是一个错误。否则可能需要使用固定范围。
为了避免此问题,如何进行以下修改?
在这种模式下,您的脚本被修改。
请进行如下修改。
从:getDataRange()
至:
var rangeAllZIPs = sheetSample1.getRange("C:C");
在此模式中,使用var rangeAllZIPs = sheetSample1.getRange(1, 3, sheetSample1.getLastRow(), 1);
的方法。
请进行如下修改。
findAll()
如果我误解了您的问题,而这不是您想要的方向,我深表歉意。