当前位置: 首页 > 知识库问答 >
问题:

如何附加新的值从主谷歌工作表到多个工作表的条件

强安和
2023-03-14

我有一个主谷歌表,有五列,每天自动更新。

Date    Event   Value1  Value2  Value3
May 1   ABC     A       Yes     Yes
May 1   ABC     B       Yes     Yes
May 1   ABC     C       Yes     Yes
May 1   DEF     A       Yes     Yes
May 1   DEF     B       Yes     Yes
May 1   GHI     A       Yes     Yes
May 1   GHI     C       Yes     Yes
May 2   ABC     A       Yes     Yes
May 2   DEF     D       Yes     Yes
May 2   GHI     C       Yes     Yes

同一文档在主表中有三种类型事件的对应表:ABC、DEF和GHI。这些图纸中包含现有值。

我想谷歌应用程序脚本只追加唯一的和新的价值观,从Value1到相应的事件表编辑的主表。例子:

表ABC

Value
A
B
C

工作表DEF

Value
A
B
D

床单GHI

Value
A
C

它实际上并不取决于日期,而是查看相应表格中已经存在的内容。

我是谷歌应用脚本的完全初学者。我研究了其他解决方案,我所做的最大努力是找到如何从这里根据事件值动态创建不同的工作表。

唯一的问题是,这会复制所有行,这意味着我在其他工作表中会得到重复。

function createNewSheets() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var masterSheet = spreadsheet.getSheetByName('Raw');
  var data_range = masterSheet.getRange('B:C').getValues();
  // Get headers row (to be appended on top when new sheet is created):
  var headers = data_range[0];
  // Iterate through all rows of data from Raw:
  for (var i = 1; i < data_range.length; i++) {
    var row = data_range[i]; // Current row
    var eventName = row[0]; // Event name
    // Get sheet with current event name:
    var sheet = spreadsheet.getSheetByName(eventName);
    // Check if sheet with current event name exists. If it doesn't it creates it:
    if (!sheet) {
      sheet = spreadsheet.insertSheet(eventName);
      sheet.appendRow(headers);
    }
    // Appends current row of data to the new sheet:
    sheet.appendRow(row);

  }
}

我只需要帮助更改工作表。世界其他地区(世界其他地区) 行以仅提取唯一值。


共有1个答案

钱稳
2023-03-14
  • 您需要实现一个条件语句来验证行[1]中具有相同值的条目是否已经存在

样品:

function createNewSheets() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var masterSheet = spreadsheet.getSheetByName('Raw');
  var data_range = masterSheet.getRange(1,2,masterSheet.getLastRow(),2).getValues();
  // Get headers row (to be appended on top when new sheet is created):
  var headers = data_range[0];
  // Iterate through all rows of data from Raw:
  for (var i = 1; i < data_range.length; i++) {
    var row = data_range[i]; // Current row
    var eventName = row[0]; // Event name
    // Get sheet with current event name:
    var sheet = spreadsheet.getSheetByName(eventName);
    // Check if sheet with current event name exists. If it doesn't it creates it:
    if (!sheet) {
      sheet = spreadsheet.insertSheet(eventName);
      sheet.appendRow(headers);
    }
    //retrieves values in column A of the destination sheet
    var sheetValuesB = sheet.getRange(1,2,masterSheet.getLastRow(),1).getValues();
    //transforms the values into a 1-D array
    sheetValuesB = sheetValuesB.flat();
    //check if row[1] already exists in sheet
    if(sheetValuesB.indexOf(row[1]) == -1){
      // Appends current row of data to the new sheet:
      sheet.appendRow(row);
    }        
  }
}

注释:

我建议您将范围设置定义为limit getLastRow(),它检索包含数据的最后一行,而符号B:C也会遍历所有空行,并使脚本变得不必要的慢。

 类似资料:
  • 是否有一种方法可以扫描多个Google工作表,从键上的主工作表中找到匹配项,并在适用的情况下更新Google工作表中的单元格? 例如,下面我有4张。第一个是主人,其他的是孩子。如果来自Master的任何工作表的A列(倡议名称)上有匹配,则更新C列(金额)和D列(日期)中的单元格,否则保持工作表不变。在本例中,船长的倡议名称为“G”,金额为“50”,日期为“2020年1月4日”。儿童1的倡议名称为“

  • 我在PHP服务器中使用以下代码更新单元格中的值 运行此请求时,收到以下错误: 在PHP中,一次更新多个不连续单元格的GoogleSheetsAPI请求的正确方法是什么?

  • 有人知道如何在Googlesheets中将一行从一张工作表转换/复制到另一张工作表吗? 下面是我想做的:所以我有一个谷歌电子表格文件。它有两个选项卡/工作表。 现在,工作表1有一列名为:“总计” 我知道我必须使用appendRow()函数。但这需要硬编码的值。类似这样的东西:床单。appendRow({“a”,“b”}),但我试图追加的行是由用户输入的。 然后把整行都复制过来。到目前为止,我能够得

  • 我想不断更新/重写到谷歌表。不过,我不能只是更新它,而不清除旧的工作表,因为有时更新的行比之前的行和旧的行留在工作表中。 因此,开发者页面上列出的协议是: 翻译成python会是这样的,我认为: 返回错误: GoogleapClient。错误。HttpError:https://sheets.googleapis.com/v4/spreadsheets/[uniqueIDhere]/values:

  • 所以我在谷歌电子表格文档中有两张表格。 表1有一列包含以下数据: 然后SHEET 2有2列,数据如下: 我需要在“表单提交”上运行一个脚本,该脚本执行以下操作: 打开表1(其中记录了ID) 将其与表2的第1列的值按顺序进行比较 当找到匹配时,将电子邮件地址提取到变量var中 有人能帮我吗?这两张表都在同一个谷歌文档中。 非常感谢。 沙希

  • 为此,我在谷歌上搜索了很多,但不知道怎么做。 我有3家公司为我们提供股票,让我们假设谷歌表单中的公司1、公司2和公司3。 一旦我们添加订单,它将反映在各个公司的谷歌表单订单中。并非所有公司都必须看到所有订单,因为它们可能处理特定项目。 现在每一家公司google sheet都有可用的股票下拉列表,带有(是/否)选项,可以检查特定的订单id是否可行。 我的要求是:如果任何一家公司的股票更新为“是”,