google-apps-script - Google Sheets API / JS:在工作表中查找值(任何地方)
问题描述
我正在从 Google Analytics 导出数据以将其放入 Google 表格中。我创建了一个名为“raw”的工作表,我将在其中转储所有数据。为了避免导出和转储数据,我需要检查数据是否已经存在。我不需要知道它在哪里,我只需要知道它在哪里。
我编写了一个函数来从 Google Analytics 中获取数据,它的工作原理是当我在日志中显示输出时,我得到了我需要的东西。
result = getData(tableId,dimensions,filters,'2021-01-01','2021-01-01',metrics);
Logger.log(result['rows']);
现在我想遍历这些结果并检查数据是否已经在工作表中可用。如果它尚不可用,我会将其添加到工作表的底部
var raw = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("raw");
var raw_content = raw.getDataRange();
从这里,我使用了这里可用的脚本:如何检查值是否存在于谷歌电子表格中或不使用应用程序脚本
for (var b=0;b<result['rows'].length;b++)
{
temp_date = result['rows'][b][0];
temp_value = result['rows'][b][1];
unique_id = label+'_'+temp_date;
Logger.log(unique_id);
var textFinder = raw_content.createTextFinder(unique_id);
var occurrences = textFinder.findAll().map(x => x.getA1Notation());
if (occurrences == [])
{
Logger.log('not found');
}
else
{
Logger.log('found');
}
}
即使工作表是空的,它也总是返回“找到”。如果我手动添加一个唯一 ID,它仍然会一直返回“找到”。
我也在这篇文章中尝试了第二种选择,但它不起作用。
我想避免使用循环来逐个检查单元格,因为在某些时候,那里会有很多数据。
任何的想法?
谢谢
解决方案
根据您的代码和您要完成的任务,您需要textFinder
为循环的每次迭代定义不同的label+'_'+temp_date
.
更新:无法比较 JavaScript 中的两个数组,==
因为它总是返回 false。在这种情况下,最好的方法是检查它的长度是否为零。
for (var b=0;b<result['rows'].length;b++)
{
temp_date = result['rows'][b][0];
temp_value = result['rows'][b][1];
unique_id = label+'_'+temp_date;
var textFinder = raw_content.createTextFinder(unique_id);
var occurrences = textFinder.findAll().map(x => x.getA1Notation());
if (occurrences.length)
{
Logger.log('found');
}
else
{
Logger.log('not found');
}
}
样本结果:
参考:
推荐阅读
- javascript - 为什么没有将 Value 属性添加到 HTML 中?
- java - 在 JUnit 中测试包含 try/catch 块的方法的最佳方法
- ruby - 整数不投射“08”和“09”
- python - 如何从 Python 中的元组计算运费?
- javascript - 模拟 Cookie 存储以返回自定义响应对象
- jenkins - rundeck、spinnaker和jenkins的用途是什么
- sql - 动态交叉表网格值
- python - 将 tqdm 进度条与 threading.Thread 一起使用
- c++ - vscode 快捷方式或更简单的方法将函数添加到类
- javascript - 如何测试 page.evaluateHandle 和 el.nextElementSibling 的结果?