【问题标题】:Google sheet code - Edit, Add row from sheet1 to sheet2 upon clicking a button谷歌工作表代码 - 编辑,单击按钮后将行从工作表 1 添加到工作表 2
【发布时间】:2018-05-18 12:42:04
【问题描述】:

关于下面的脚本,我需要您的帮助。我有 2 张纸(sheet1 和 sheet2)。 Sheet1 包含将在其中复制/更新 sheet2 中的单元格的单元格值。该脚本会将值从 sheet1 添加和复制到 sheet2,但它不会识别条件。我想要发生的是,如果sheet2!c3 = sheet1!f5 只会更新单元格,否则它将添加另一行并将数据从 sheet1 复制到 sheet2。

感谢您的帮助!

function emailongoing() {
   var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('OutageYellow');            
   var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('test');            
   var lastRow = sheet2.getLastRow()+1;

  cntr = 0

  if (sheet2.getRange('C3') != sheet1.getRange('F5')) {
  sheet1.getRange('E5').copyTo(sheet2.getRange(lastRow + cntr,2), {contentsOnly:true}); 
  sheet1.getRange('F5').copyTo(sheet2.getRange(lastRow + cntr,3), {contentsOnly:true});
  sheet1.getRange('C5').copyTo(sheet2.getRange(lastRow + cntr,5), {contentsOnly:true});
  sheet1.getRange('C7').copyTo(sheet2.getRange(lastRow + cntr,4), {contentsOnly:true});
  sheet1.getRange('C8').copyTo(sheet2.getRange(lastRow + cntr,9), {contentsOnly:true});
  sheet1.getRange('C9').copyTo(sheet2.getRange(lastRow + cntr,10), {contentsOnly:true});
    cntr++;
  }


  else if (sheet2.getRange('C3') != " ") {
  sheet1.getRange('E5').copyTo(sheet2.getRange(lastRow + cntr,2), {contentsOnly:true}); 
  sheet1.getRange('F5').copyTo(sheet2.getRange(lastRow + cntr,3), {contentsOnly:true});
  sheet1.getRange('C5').copyTo(sheet2.getRange(lastRow + cntr,5), {contentsOnly:true});
  sheet1.getRange('C7').copyTo(sheet2.getRange(lastRow + cntr,4), {contentsOnly:true});
  sheet1.getRange('C8').copyTo(sheet2.getRange(lastRow + cntr,9), {contentsOnly:true});
  sheet1.getRange('C9').copyTo(sheet2.getRange(lastRow + cntr,10), {contentsOnly:true});
    cntr++;
  }

}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    花点时间了解 JavaScript 中的数据类型和结构。这是基本的东西,可以为你省去很多麻烦。

    https://medium.com/dailyjs/back-to-roots-javascript-value-vs-reference-8fb69d587a18

    根据文档,Sheet 类的“getRange()”方法返回 Range 对象的实例。

    https://developers.google.com/apps-script/reference/spreadsheet/range

    因为 JS 中的对象是通过引用传递的,而不是通过值传递的(参见第一个链接),比较这两个 Range 实例就像是在询问这些对象是否在内存中占据相同的位置。显然,情况并非如此,因为 getRange("C3") 与 getRange("F5") 不同。同样,在对象的情况下,比较的是对它们在内存中存储位置的引用,而不是它们中的实际属性和值。

    另一方面,原始值(包括字符串)是按值传递的,因此您可以比较它们。但是,当您首先通过显式调用相应的构造函数将变量构建为对象时,有一些注意事项。考虑一下:

    new Number(5) == 5 //logs true because abstract comparison is used. The object is downcast to the primitive type
    
    new Number(5) === 5 //logs false when used with strict comparison that also compares types
    
    new Number(5) == new Number(5) //logs false - type coersion not required, references are not equal
    
    new Number(5) === new Number(5) //logs false  - references are not equal
    

    您必须调用 Range 对象的 getValue() 或 getValues() 方法来获取可以从工作表单元格中比较的值。最后,一次遍历一个单元格的范围是一种可怕的做法,它会使您的脚本变得非常缓慢。 检查此答案以获取详细信息 Copy/Push data from array into a sheet range one row at a time using Google Apps Script

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      • 2020-11-01
      • 1970-01-01
      相关资源
      最近更新 更多