如何解决getFormula() 和 setFormula() 到多个范围 示例脚本 1:示例脚本 2:参考:
我正在尝试使用 Google Apps 脚本在 Google 表格中将所有公式从一张工作表(一月)复制到多张工作表(二月、三月、四月等)。 下面的代码正在为单元格 A1 执行我想要的操作。 但是,我想将所有公式(或者说 A1:Z10)从工作表 1 月复制到目标工作表中的相应单元格。
function copyFormula(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("February");
var fromrange = sheet.getRange("January!A1");
var toRange2 = sheet.getRange("February!A1");
var toRange3 = sheet.getRange("march!A1");
var toRange4 = sheet.getRange("April!A1");
var toRange5 = sheet.getRange("May!A1");
toRange2.setFormula(fromrange.getFormula());
toRange3.setFormula(fromrange.getFormula());
toRange4.setFormula(fromrange.getFormula());
toRange5.setFormula(fromrange.getFormula());
}
除此之外,我相信还有更好的写法:i. e.类似 var toRange = sheet.getRange("February!A1","march!A1","April!A1","May!A1");
和 toRange.setFormula(fromrange.getFormula());
之类的东西,而不是为每个月创建单独的变量。
解决方法
我相信你的目标如下。
- 您希望脚本变得更简单。
- 您想将
January
表的单元格“A1:Z10”的公式复制到每个表中的单元格“A1:Z10”。
示例脚本 1:
遗憾的是,在当前阶段,RangeList 不能用于同一 Google 电子表格中的不同工作表。因此,在此示例脚本中,源公式使用循环放入每个工作表的单元格中。
function copyFormula(){
var sheets = ["February","March","April","May"];
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceFormulas = ss.getSheetByName("January").getRange("A1:Z10").getFormulas();
sheets.forEach(s => ss.getSheetByName(s).getRange("A1:Z10").setFormulas(sourceFormulas));
}
- 如果要增加张数,请修改
sheets
。
示例脚本 2:
在此示例脚本中,使用了 Sheets API。因为我觉得上面脚本的处理成本有点高,因为setFormula
是循环使用的。在这个示例脚本中,过程成本会比上面的略低一些。当您使用此脚本时,please enable Sheets API at Advanced Google servicies。
function copyFormula(){
var ranges = ["February!A1:Z10","March!A1:Z10","April!A1:Z10","May!A1:Z10"];
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceFormulas = ss.getSheetByName("January").getRange("A1:Z10").getFormulas();
var values = ranges.map(r =>({values: sourceFormulas,range: r}));
var resource = {responseValueRenderOption:"FORMULA",valueInputOption:"USER_ENTERED",data:values};
Sheets.Spreadsheets.Values.batchUpdate(resource,ss.getId());
}
- 如果要增加张数,请修改
ranges
。
参考:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。