0

问题是,如果任何单元格包含公式,那么在 moveTo 方法之后,公式不会更新其引用。

下面是我正在处理的代码,除了更新单元格引用之外,它还可以完成工作。

//WORKING - MOVES VALUES FROM "A1:B.." TO "C+lastrow2"..
function my4() {
  var thiss = SpreadsheetApp.getActiveSpreadsheet();
  var thissSh1 = thiss.getSheetByName("Entry");
  var lastrow1 = thissSh1.getLastRow()+1;
  var range = thissSh1.getRange("A1:A"+lastrow1).getValues();
  for(var i in range){
  source = thissSh1.getRange("A1:B1").offset(i, 0);
  dest = thissSh1.getRange("C"+lastrow1+":D"+lastrow1).offset(0, i*2);
  source.moveTo(dest);
  }
}
4

2 回答 2

0

感谢您的反馈!我想出了一个解决方法的想法,我不知道 jet 如何解决,因为我几天前才开始使用 google-app-scripts。

可能的解决方法 1. 为每个必须移动的单元格生成一个唯一的范围名称。2. 用范围名称替换公式中的引用。3. 移动第一个单元格。保持对其他单元格的引用(我测试过)。但是,其他单元格现在将引用移动单元格的先前位置,因此必须删除旧单元格的名称并命名为新位置。4. 对范围内的每个单元格执行相同操作。

您认为使用 google-app-scripts 可行吗?

最好的!

于 2013-05-02T18:31:25.807 回答
0

文档清楚地说明了格式和值是复制的。它没有提到公式。

moveTo(target):从此范围剪切并粘贴(格式和值)到目标范围。

显然,它将公式视为内容 - 如果它更新它们就像您通过在电子表格中拖放移动范围一样会很好。

自 2011 年以来一直存在一个未解决的问题:

问题 830:在电子表格中移动范围应更新引​​用它的公式。

给它加星标以接收更新。

还有几个moveTo()值得注意的问题:

问题 138:评论未移动或复制 w r.moveTo 或 r.copyTo

问题 464: Range.moveTo() 无法正确处理重叠的源和目标范围

解决方法

用于getFormulas()从原始范围检索公式,遍历并转置所有公式,然后用于setFormulas()将它们放入新范围。

听起来很简单,其实不然。在每个公式中,您需要识别单元格引用,确定它们是否受到移动的影响,如果受到影响则更改它们。鉴于可以描述单元格或范围的多种方式,仅识别它们将是棘手的。

错误情况也需要考虑:跨越移动区域的范围呢?如果您最终创建了循环引用怎么办 - 这些可能会削弱您的电子表格。

我认为,您可以创建一个典型的双循环函数来移动和转置一个简单的公式子集。但对于一般解决方案,我认为我们正在等待谷歌。

于 2013-05-02T11:43:10.497 回答