Google表格代码 - 编辑,单击按钮后从第1页到第2页添加行

时间:2018-05-18 12:42:05

标签: google-apps-script google-sheets

我需要你的帮助,我的脚本如下。我有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++;
  }

}

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

price

您必须调用Range对象上的getValue()或getValues()方法,以获取可以从表格单元格中比较的值。最后,一次迭代一个单元格是一个可怕的做法,会使你的脚本非常迟缓。  请查看此答案以获取详细信 Copy/Push data from array into a sheet range one row at a time using Google Apps Script