【问题标题】:Importing data with formula from another google sheet and deleting original data从另一个谷歌表格中导入带有公式的数据并删除原始数据
【发布时间】:2018-10-08 12:03:25
【问题描述】:

我正在使用以下脚本从另一个 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();
}

【问题讨论】:

  • 您能分享您的电子表格吗?很乐意为您提供帮助。现在看起来您需要使用 getFormulas 来实现您想要实现的目标
  • 如果要传输公式,请使用.getFormulas 而不是.getValues。如果您需要两者,则同时使用两者,并通过迭代公式数组将静态值替换为每个单元格的公式。如果您提前知道哪些范围具有公式,哪些具有静态值,则对适当的范围使用适当的调用。还要考虑.copyTo 方法。

标签: google-apps-script google-sheets


【解决方案1】:

问题:

  • 无法使用getValues() 检索公式

可能的解决方案:

  • 使用range#getFormulasrange#getValues 并混合这两个数组以创建一个公式和值数组,稍后将其发送给setValues()
  • 使用高级 Google 服务访问 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;

参考资料:

【讨论】:

  • 我认为示例脚本 sn-p 1 是修复程序,它在公式中购买的是引用第 2 行但那不是它导入的行,所以它没有解决我的问题,谢谢
  • @Johnny 所以,这就是为什么它被称为样本。它不是为了解决你的问题。它旨在提供一个总体思路来解决您发布的问题。您需要在几天内一次又一次地尝试完成其余的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
  • 2020-02-19
  • 1970-01-01
  • 2023-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多