Google电子表格 - 脚本,在特定时间将单元格从一张纸复制到另一张纸

时间:2014-07-01 00:14:34

标签: google-apps-script google-sheets

我知道我可能会问同样的事情。但我尝试了不同答案的脚本(显然改变了单元格值),但我的问题有点不同。

我需要在Google电子表格中制​​作一个脚本,以便在特定时间将单元格从一张工作表复制到另一张工作表(在同一文档中)。

我附上的图片显示了要复制的细胞。一些单元格在复制之前需要SUM公式。

为方便起见,我还分享了Google表格的副本。 https://docs.google.com/spreadsheet/ccc?key=0AlVSjrM0ckyLdEtiLVNuOVpwQ3BGdUgwU0VpcldKaFE&usp=sharing

图片: Sheet1和Sheet2 http://i59.tinypic.com/23jsu9x.jpg

1 个答案:

答案 0 :(得分:2)

您可以更新fromTo数组以包含更多范围。脚本是相当不言自明的。设置触发器以每天运行backup。您可能希望将GMT更改为您的时区。

function backup() {
  var src = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily Report");
  var dst = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Monthly Production Report");
  var dstRow = getDstRow(dst);

  var fromTo = [["B26", 2],
                ["C26", 3],
                ["B29:B31", 4],
                ["C29:C31", 5],
                ["B34", 6],
                ["C34", 7]];

  for (var i=0; i<fromTo.length; i++) {
    var r = fromTo[i];
    dst.getRange(dstRow, r[1]).setValue(src.getRange(r[0]).getValues().reduce(sum, 0));
  }
}

function getDstRow(dst) {
  var today = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd");
  Logger.log(today);
  for (var row=1; row<=dst.getLastRow(); row++) {
    Logger.log(dst.getRange(row,1).getValue());

    try {
      var d = Utilities.formatDate(dst.getRange(row, 1).getValue(), "GMT", "yyyy-MM-dd");
      if (d == today) {
        return row;
      }
    } catch (err) {}
  }
}

function sum(a,b) {
  return a + b;
}