首页 > 解决方案 > 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,它仍然会一直返回“找到”。

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

我想避免使用循环来逐个检查单元格,因为在某些时候,那里会有很多数据。

任何的想法?

谢谢

标签: google-apps-scriptgoogle-sheets-api

解决方案


根据您的代码和您要完成的任务,您需要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');
       }
  }

样本结果:

在此处输入图像描述

参考:

类文本查找器


推荐阅读