Google apps script Google Sheets API/JS:在工作表中查找值(任意位置)

Google apps script Google Sheets API/JS:在工作表中查找值(任意位置),google-apps-script,google-sheets-api,Google Apps Script,Google Sheets Api,我正在从Google Analytics导出数据,将其放入Google工作表中。我已经创建了一个名为“raw”的工作表,我将在其中转储所有数据。为了避免导出和转储数据,我需要检查数据是否已经存在。我不需要知道它在哪里,我只需要知道它在哪里 我已经写了一个函数来从Google Analytics中获取数据,它的工作原理就像当我在日志中显示输出时,我得到了我所需要的 result = getData(tableId,dimensions,filters,'2021-01-01','2021-01-0

我正在从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;bx.geta1表示法());
如果(出现次数==[])
{
Logger.log('notfound');
}
其他的
{
Logger.log('found');
}
}
即使工作表是空的,它也总是返回“found”。如果我手动添加一个唯一ID,它仍然会始终返回“find”

我在这篇文章中也尝试了第二种选择,但它不起作用

我希望避免使用循环逐个检查单元格,因为在某些时候,其中会有大量数据

有什么想法吗


感谢您的代码和您正在努力完成的工作,您需要为循环的每次迭代定义
textFinder
,并使用不同的
label+'''+temp\u 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');
       }
  }
for(var b=0;bx.geta1表示法());
如果(出现次数.长度)
{
Logger.log('found');
}
其他的
{
Logger.log('notfound');
}
}
样本结果:

参考资料:


您的
textFinder
实例是如何定义的?如果要在工作表的整个数据范围内搜索多个文本字符串,则需要在for循环的每次迭代中重新定义
textFinder
。谢谢,我也尝试过,但它无法解决问题:(请发布您的工作表和完整代码的副本,以便我可以进一步查看。你好,卡洛斯,谢谢。工作表完全为空,代码使用textfinder声明。我已更新了代码,缺少一行。如果我完全遗漏了这一点,我深表歉意,但使用
=
无法在JavaScript或GAS中比较两个数组,即将始终返回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');
       }
  }