Google表格-替换数组中公式的特定部分

2 Badatcoding

我试图编写一个脚本,以将某些公式的引用替换为其当前值,然后再复制到新范围。

我想保留其余的公式,以便可以存储值的历史记录而无需使用新的工作表。

我尝试了这段代码,但公式中未发生任何变化:

function repformulas() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var formrange = sheet.getRange("h1:h6");
var formulas = formrange.getFormulas();
var reprange = sheet.getRange("c2:c6");
var pasterange = sheet.getRange("i1:i6");
var regexp = /(.{2})\s./g;
  for (var i = 0; i < formulas.length; i++) {
    for (var j = 0; j < formulas[0].length; j++) {
         formulas[i][j] = formulas[i][j].replace(regexp, repvalue[i][j]);
    }
  }
sheet.insertColumns(9, 1);
pasterange.setFormulas(formulas);
}

我在公式数组中有这个:

["=eomonth(I1;1)"] ["=($C$2/3869,01-1)*100"] ["=($C$3/4625,68-1)*100"] ["=($C$4/8494.69-1)*100"] ["=($C$5/15056.32-1)*100"] ["=($C$6/23540,01-1)*100"]

我想用它替换它:

["=eomonth(I1; 1)"] ["=(4001.02/3869.01-1)*100"] ["=(4805.08/4625.68-1)*100"] ["=(8399.84/8494.69-1)*100"] ["=(15057.98/15056.32-1)*100"] ["=(23554.56/23540.01-1)*100"]

如果有人可以帮助我,我将非常感激。

Tanaike
  • 您想通过将a1Notations转换为值来放置公式。
  • I1of=eomonth(I1;1)是日期对象。您要保留此设置并转换其他a1Notations。
  • 从您的答复是Decimals are separated by comma in my country.
  • 您想使用Google Apps脚本来实现。

如果我的理解是正确的,那么该修改如何?该修改的流程如下。

流:

  1. 从细胞中提取公式和值H1:H6C1:H6分别。
  2. 检索的值C2, C3, C4, C5, C6, H1
  3. 转换检索到的公式。
    • ,修改为.
    • 的a1Notations $C$2$C$3$C$4$C$5$C$6被修改为从“C2”至“C6”的值。
    • 在这种情况下,=eomonth(I1;1)将转换为当前值。因此可以保存该值。sheet.insertColumns(9, 1)运行时,I1of=eomonth(I1;1)更新为J1我以为可以使用。
  4. 在“ I”列中插入一列。
  5. 将转换后的公式放入I1:I6插入的单元格中

修改后的脚本:

请按如下所示修改脚本。

function repformulas() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var formrange = sheet.getRange("h1:h6");
  var formulas = formrange.getFormulas();

  // --- I modified below script
  var [[_, _, _, _, _, H1], [C2], [C3], [C4], [C5], [C6]] = sheet.getRange("C1:H6").getValues();
  var obj = {C2: C2, C3: C3, C4: C4, C5: C5, C6: C6};
  var converted = formulas.map(function(e, i) {
    return i == 0 ? [H1] : [e[0].replace(/,/g, ".").replace(/\$[A-Z]\$\d+/, function(m) {return obj[m.replace(/\$/g, "")]})];
  });
  // ---

  var pasterange = sheet.getRange("i1:i6");
  sheet.insertColumns(9, 1);
  pasterange.setFormulas(converted);
}

参考文献:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章