首页 > 解决方案 > 从另一个谷歌表格中导入带有公式的数据并删除原始数据

问题描述

我正在使用以下脚本从另一个 Google 表格导入数据,但它没有引入我需要的公式。

我已经尝试过ImportRange,但这似乎只是同步了两张表,我需要删除原始表(表 1)中的数据,但这也会在我购买的表(主表)中删除它。

还有另一种方法可以做到这一点吗?

function Copy() {
  var sss = SpreadsheetApp.openById('Sheet 1 ID');
  var ss = sss.getSheetByName('results');
  var range = ss.getRange('2:688');
  var data = range.getValues();
  var tss = SpreadsheetApp.openById('Master Sheet ID');
  var ts = tss.getSheetByName('results');
  ts.getRange(ts.getLastRow() + 1, 1, data.length, data[0].length).setValues(
    data
  );
  var sheet = SpreadsheetApp.openById('Sheet 1 ID').getSheetByName('Roger');
  ss.getRange('2:688').clearContent();
}

标签: google-apps-scriptgoogle-sheets

解决方案


问题:

  • 不检索公式getValues()

可能的解决方案:

  • 使用range#getFormulasrange#getValues混合这两个数组来创建一个公式和值的数组,以供setValues()以后使用。
  • 使用 Advanced Google Services 访问 Sheets API 以直接获取组合。

示例脚本片段:

  var data = range.getValues();
  data = range.getFormulas().map(function(e, i) {//i=index of row(e)
    return e.map(function(f, j) {//j = index of column(f)
      return f === "" ? data[i][j] : f;
    });
  });

或者

  var req = {
    ranges: 'results!2:688',
    valueRenderOption: 'FORMULA', //get formulas with values
  };
  var r = Sheets.Spreadsheets.Values.batchGet('Sheet 1 ID', req);
  data = r.valueRanges[0].values;

参考:


推荐阅读