Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 粘贴特殊值_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 粘贴特殊值

Google apps script 粘贴特殊值,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个由3列和2(或更多)行组成的范围。 中间一列包含一个公式:=转置(拆分(A1,“,”) 脚本需要将该范围作为值而不是公式移动(剪切)到另一张图纸上 谷歌应用程序脚本是否有一种“粘贴特殊值”的方法 以下是我当前使用的行: sheet1.getRange("F1:H3").moveTo(sheet2.getRange("A1")); 有人能告诉我如何在这些值移到表2之前将其锁定吗 (仅供参考:这只需要代码解决方案)在源范围上使用getValues(),在目标范围上使用setValues(

我有一个由3列和2(或更多)行组成的范围。 中间一列包含一个公式:
=转置(拆分(A1,“,”)

脚本需要将该范围作为值而不是公式移动(剪切)到另一张图纸上

谷歌应用程序脚本是否有一种“粘贴特殊值”的方法

以下是我当前使用的行:

sheet1.getRange("F1:H3").moveTo(sheet2.getRange("A1")); 
有人能告诉我如何在这些值移到表2之前将其锁定吗

(仅供参考:这只需要代码解决方案)

在源范围上使用getValues(),在目标范围上使用setValues()。必须确保范围的尺寸相同。然后可以清除()源代码

这里有一个实用函数,可以完成这项工作。它也是。请注意,它将范围对象作为参数

代码 测试功能 成功的测试将清除整个源范围,其内容将仅作为值显示在目标范围中。目标维度将与源维度匹配,而不管作为目标提供的是什么-只有左上角定位移动

function test_moveRange() {
  var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  var destSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];

  var source = sourceSheet.getRange("A7:C10");
  var destination = destSheet.getRange("C4:H2");
  moveRange(source,destination);
}

作为替代方法,您可以使用仅复制值。要模拟moveTo()的效果,仍然需要清除源范围

此外,如果更简单的话,getRange()接受包含工作表名称的字符串引用。因此:

function moveValuesOnly() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var source = ss.getRange('Sheet1!F1:H3');
  source.copyTo(ss.getRange('Sheet2!A1'), {contentsOnly: true});
  source.clear();
}

我确实试过了(我只是又试了一次)。我收到以下消息。。。“TypeError:在对象工作表中找不到函数getValues”。所以我想我的问题现在扩展到包括:为什么getRange在同一个工作表对象中工作,而getValues不工作?(天哪……就在我认为我已经掌握了这个窍门的时候:/)你必须检查这个方法属于哪个类,并确保它们正确配对。
getValues()
方法属于类范围,而不是Sheet,但是
getRange()
是一个Sheet方法。好吧,现在我真的很困惑。我需要能够指定哪个工作表是源,哪个工作表是目标。有了getRange,我可以做到这一点。那么,如何使用getValues指定图纸源/目标?(我发誓,如果我看到另一条红色的错误消息……我的头要爆炸了!为什么“爆炸”而不是“爆炸”,你可能会问你自己;爆炸属于阶级愤怒。而爆炸属于阶级愤怒。这一切都很符合逻辑)查看更新,具有完整的工作功能。一旦有了一个源范围,就可以使用
source.getValues()
以二维数组的形式获取内容(仅值)。然后使用
dest.setValues(values2set)
将该数组放入目标。请记住,
getRange()
为您提供了一个范围对象,它不是单元格范围的内容。DUDE!!!!哇,阿达姆,我甚至不能告诉你,我是多么放心,能够纳入我的代码!它就像一个符咒!你救了我的命,兄弟!非常感谢你!加上。。。。我甚至能理解它!!!:P谢谢。真的,我只是想再次感谢你。自从您提供这段代码以来,我一直在定期使用这段代码。“教一个人钓鱼……”没问题,伙计,很高兴这有帮助。我希望我能给那些在黑暗的过去发布过这个方法的人一个信任,但我真的不记得了。@user2579734-请不要为了提问而编辑现有的答案。这就是该选项的用途!;-)读者还有一个注意事项:如果您想选择性地从单元格中“清除”哪些内容(例如,内容而不是格式),您可以将
clear(options)
方法与此脚本结合使用,可在此处找到:感谢@AdamL分享此非常有用的答案。:)
function moveValuesOnly() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var source = ss.getRange('Sheet1!F1:H3');
  source.copyTo(ss.getRange('Sheet2!A1'), {contentsOnly: true});
  source.clear();
}