我试图编写一个脚本,以将某些公式的引用替换为其当前值,然后再复制到新范围。
我想保留其余的公式,以便可以存储值的历史记录而无需使用新的工作表。
我尝试了这段代码,但公式中未发生任何变化:
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"]
如果有人可以帮助我,我将非常感激。
I1
of=eomonth(I1;1)
是日期对象。您要保留此设置并转换其他a1Notations。Decimals are separated by comma in my country.
。如果我的理解是正确的,那么该修改如何?该修改的流程如下。
H1:H6
和C1:H6
分别。C2, C3, C4, C5, C6, H1
。,
修改为.
。$C$2
,$C$3
,$C$4
,$C$5
和$C$6
被修改为从“C2”至“C6”的值。=eomonth(I1;1)
将转换为当前值。因此可以保存该值。当sheet.insertColumns(9, 1)
运行时,I1
of=eomonth(I1;1)
更新为J1
。我以为可以使用。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] 删除。
我来说两句