当前位置: 首页 > 知识库问答 >
问题:

将getFormula()和setFormula()设置为多个范围

韩捷
2023-03-14

我正在尝试使用谷歌应用程序脚本将谷歌工作表中的所有公式从一个工作表(1月)复制到多个工作表(2月、3月、4月等)。下面的代码正在为单元格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());
}

除此之外,我确信还有一个更好的方法来写这个:例如,类似于var toRange=sheet.getRange(“二月!A1”,“三月!A1”,“四月!A1”,“五月!A1");toRange.set公式(from mRange.get公式());而不是为每个月创建单独的变量。

共有1个答案

越朗
2023-03-14

我相信你的目标如下。

  • 你想变得更简单你的脚本。
  • 您想要将一月工作表的单元格A1: Z10的公式复制到每个工作表中的单元格A1: Z10。

不幸的是,在当前阶段,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 API。因为我认为上面脚本的处理成本有点高,因为在循环中使用了setFormula。在这个示例脚本中,处理成本将比上面的略低。使用此脚本时,请在高级Google服务中启用Sheets API。

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());
}
  • 如果要增加图纸,请修改范围
  • 方法:电子表格。价值观批量更新
 类似资料:
  • 假设我想要一个变量包含从1到100的数字。我可以这样做: 但是把所有这些数字写下来需要很多时间。有没有办法给这个变量设置一个范围?类似的东西: 这听起来可能是一个非常愚蠢的问题,但我自己还没有弄清楚。提前感谢。

  • 我正在尝试开发一个滑块,如果用户没有点击后退或前进按钮,它每5秒就会改变一次。 但是如果他(用户)这样做了,间隔会触发多次。。。为什么? 我将间隔保存在一个变量中,并清除该变量,因此我不知道为什么这不起作用。。。但是看看你自己: }); 感谢阅读;-)

  • 我试图一次为一个元素设置多个属性。我找到了这个答案,以及对那个答案的这个评论。在那里的JSFiddle中,他不使用字符串作为属性名,与使用字符串的答案相反。 我在第7行添加了以下内容: 但是我得到了以下错误: 未捕获的引用Error:未定义html 评论JSFiddle(已编辑)

  • 问题内容: 我有一个JComboBox,其中的项目是查询的结果。该组合显示了来自查询的所有类别名称,对吗?好的,可以。现在,我需要为每个项目赋予一个值,该值就是产品的ID。 到目前为止,这是我得到的: 正如您在代码中看到的那样,每个项目的“标签”都是它的名称。现在,如何设置每个项目的ID,以便以后进行操作? 谢谢,并尝试轻松回答,我正尽最大努力尝试获取Java东西!哈! 问题答案: 默认情况下使用

  • 问题内容: 更新 :对于最新的Angular版本,该问题已过时,请参阅tsh对此职位的评论 我已经将复选框绑定到一个值: 控制器中复选框的值设置为1: 但是,最初该复选框未显示为选中状态。如果我将的初始值更改为,则可以。(jsfiddle演示) 我尝试了各种变化: 他们都不工作。如何使angular将参数视为数字? 问题答案: 您可以使用 ngChecked ,如果表达式为真,则将在元素上设置特殊

  • 我有一个JComboBox,其中项目是查询的结果。组合显示了从查询中获取的所有类别名称,对吗?好的,它起作用了。现在我需要给每个项目一个值,这将是产品的ID。 这是我到目前为止得到的: 正如您在代码中看到的,每个项目的“标签”都是它的名称。现在,如何设置每个项目的ID,以便我可以操作之后? 谢谢,试着轻松回答,我很难得到这个Java的东西!哈!