google-apps-script - Google Sheets 脚本:搜索字符串的最快方法(不需要位置)
问题描述
我试图找到在工作表中找到字符串的最快方法,我不需要知道字符串的位置,我只需要知道它是否已经存在。
我试过这个:
var raw = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("raw");
var raw_content = raw.getDataRange();
var textFinder = raw_content.createTextFinder(unique_id);
var occurrences = textFinder.findAll().map(x => x.getA1Notation());
这大约需要 140 毫秒
还有这个:
function StrSearch(searchString)
{
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("raw");
var values = sheet.getDataRange().getValues();
for(var i=0, iLen=values.length; i<iLen; i++)
{
if(values[i][0] == searchString)
{
return values[i][1];
}
}
}
我有大约 30 个标签来检查 100 个不同的日期,这意味着如果值已经存在,则检查 3000 次。大多数情况下,它会达到 Google 表格中的超时限制。
我想知道是否有更快的方法来执行此操作,因为我很想知道字符串在哪里,我只需要知道它就在那里。该字符串在一个特定列中可用,这意味着我什至不需要搜索整个工作表。
任何想法?
谢谢
解决方案
您的所有答案都帮助我进一步研究了这个问题,最终我得到了不同的解决方案。
最初的工作方式
- 阅读所有过滤器以收集在工作表“RAW”中
- 将过滤器与日期相结合以创建唯一标签
- 检查这个独特的标签是否已经在我的最终工作表中
- 如果是,则什么也不做,如果不是,则从 GA 获取数据并写入
我改成了以下
- 阅读所有过滤器以收集在工作表“RAW”中
- 每个过滤器进行一次查询 100 天,而不是一天一天
- 将结果转储到我的最终工作表中
- 最后删除重复项
整个过程现在大约需要 100 秒(包括对 API 的调用)。
我使用以下功能来删除重复项
function removeDuplicates() {
Logger.log('start duplicates '+Date.now());
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("raw");
var data = sheet.getDataRange().getValues();
var newData = [];
for (var i in data) {
var row = data[i];
var duplicate = false;
for (var j in newData) {
if (row.join() == newData[j].join()) {
duplicate = true;
}
}
if (!duplicate) {
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
Logger.log('end duplicates '+Date.now());
}
此功能最多占用总时间的 50%,但仍然合理。
谢谢
推荐阅读
- parsing - 尝试加载数据时出现键错误
- templates - Jinja2模板数组中是否存在值?
- android - Android Studio 是否仍然编译未使用的导入库?
- hyperledger-fabric - AWS 上的 Hyperledger 结构,锚节点更新后节点崩溃
- python - 约束可以利用 groupby (pivot) 功能吗?(scipy.optimize.minimize;SLSQP)
- r - ifelse 带有可能的字符串匹配列表,没有其他
- c - 在函数 C 中返回“char *tab[]”
- database - ValueError:在可以使用这种多对多关系之前,变量需要具有字段“id”的值 - Django
- c# - EF Plus IncludeFilter 不会重置
- grails - 无法解析类 grails.plugin.multitenant.core.util.TenantUtils - Grails 2.3.11