用于将特定单元格复制到Google电子表格中的另一个工作表的脚本

时间:2014-09-19 10:49:14

标签: google-sheets

我正在尝试制作一张包含2张的Google电子表格。 link 第一张“订单”是我下订单的地方,当我按下“保存”按钮时,我想更新“数据”表,插入到它(最后)以下

订单号,日期,编号,描述和价格。

每种产品的订单号和日期相同。

我为此写的脚本是:

function saveData() {
   var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('order');            
   var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('data');            
   var lastRow = sheet2.getLastRow()+1;


   if (sheet1.getRange('B6') != " ")
       sheet1.getRange('a2').copyTo(sheet2.getRange(lastRow,1), {contentsOnly:true});
       sheet1.getRange('b2').copyTo(sheet2.getRange(lastRow,2), {contentsOnly:true});
       sheet1.getRange('b6').copyTo(sheet2.getRange(lastRow,3), {contentsOnly:true});
       sheet1.getRange('c6').copyTo(sheet2.getRange(lastRow,4), {contentsOnly:true});

   if (sheet1.getRange('B7') != " ")
       sheet1.getRange('a2').copyTo(sheet2.getRange(lastRow+1,1), {contentsOnly:true});
       sheet1.getRange('b2').copyTo(sheet2.getRange(lastRow+1,2), {contentsOnly:true});
       sheet1.getRange('b7').copyTo(sheet2.getRange(lastRow+1,3), {contentsOnly:true});
       sheet1.getRange('c7').copyTo(sheet2.getRange(lastRow+1,4), {contentsOnly:true});

   if (sheet1.getRange('B8') != " ")
       sheet1.getRange('a2').copyTo(sheet2.getRange(lastRow+2,1), {contentsOnly:true});
       sheet1.getRange('b2').copyTo(sheet2.getRange(lastRow+2,2), {contentsOnly:true});
       sheet1.getRange('b8').copyTo(sheet2.getRange(lastRow+2,3), {contentsOnly:true});
       sheet1.getRange('c8').copyTo(sheet2.getRange(lastRow+2,4), {contentsOnly:true});

}

我的问题是,即使第2项和第3项为空,在“数据”表中我仍然可以获得订单号和日期。 有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

你忘记了几件事:

  1. getRange()不会为您提供任何可以直接使用的内容;可以这么说,它是该范围的本地代理。要获取包含的数据,您需要使用 .get Range()。getValue()来获取范围内左上角单元格的内容。
  2. 你的如果块不是块!您需要将所有语句与括号分组。
  3. 您无法确定空单元格是!=“”!但是,我希望, getValue()本身就是'无效',足以满足您的需要。 getValue()。length> 0 也可以。
  4. 如果使用递增计数器,也可以避免“数据”中的空行。

    所以你的代码看起来像这样:

    cntr = 0
    if (sheet1.getRange('B6').getValue()) {
      sheet1.getRange('a2').copyTo(sheet2.getRange(lastRow + cntr,1), {contentsOnly:true}); 
      sheet1.getRange('b2').copyTo(sheet2.getRange(lastRow + cntr,2), {contentsOnly:true});
      sheet1.getRange('b6').copyTo(sheet2.getRange(lastRow + cntr,3), {contentsOnly:true});
      sheet1.getRange('c6').copyTo(sheet2.getRange(lastRow + cntr,4), {contentsOnly:true});
      cntr++;
    }
    /*  next row  */
    if ( . . .  ) {
        etc.
        etc.
      cntr++;
    }