google-apps-script - 谷歌应用脚本将范围从谷歌工作表剪切并粘贴到另一个谷歌工作表
问题描述
我正在尝试编写一个脚本,该脚本从谷歌电子表格中剪切一个范围并将其粘贴到另一个电子表格中。只要源工作表是我文档中的第一张工作表,该脚本就可以正常工作。如何修复它以便脚本抓取正确的工作表,无论它在我的文档中的什么位置?
我对此非常陌生,并且主要使用我在网上找到的代码。可能犯了一个非常明显的错误..
function CopyRangeTo_OtherSheet() {
var sss = SpreadsheetApp.openById('1O1gML-IeOkx6n6RhCavay6Zg9zflalcVs0qkB2yu7bE');
var ss = sss.getSheetByName('Sheet1');
var range = ss.getRange(2,4,sss.getLastRow()-1,9);
var data = range.getValues();
var tss = SpreadsheetApp.openById('1WHoETM3QxV166ndnPW4Qv37Y6SBGPVw-CcEQxNpw0Co');
var ts = tss.getSheetByName('Sheet3');
ts.getRange(ts.getLastRow()+1, 1,50,9).setValues(data);
var spread = SpreadsheetApp.openById('1O1gML-IeOkx6n6RhCavay6Zg9zflalcVs0qkB2yu7bE');
var sheet = spread.getSheetByName("Sheet1");
sheet.getRange("D2:H").clearContent();
}
解决方案
您的行var ss = sss.getSheetByName('Sheet1');
暗示您使用名称为 的工作表Sheet1
。
这是您用来从中获取并随后复制它们的values
工作range
表。
如果您想从不同的工作表复制/剪切和粘贴值,只需将工作表的正确名称粘贴到var ss = sss.getSheetByName('PASTE HERE THE NAME OF THE SHEET');
小注释:
如果要清除的范围与复制值的范围相同,则无需再次定义。您可以简单地替换行
var spread = SpreadsheetApp.openById('1O1gML-IeOkx6n6RhCavay6Zg9zflalcVs0qkB2yu7bE'); var sheet = spread.getSheetByName("Sheet1"); sheet.getRange("D2:H").clearContent();
通过
range.clearContents();
另请注意:
setValues()
仅当应设置值的范围与值范围(即原始范围)具有相同的维度时才有效。
如果您的原始范围是2,4,ss.getLastRow()-1,9
,那么行ss.getLastRow()-1
数和列数是9
。
因此,您需要定义
ts.getRange(ts.getLastRow()+1, 1,ss.getLastRow()-1,9).setValues(data);
动态调整行号。
推荐阅读
- vue.js - 具有标准化数据的 Vuex getter 不是响应式的
- python - 在 numpy 中执行此操作的简单方法?
- c++ - c++ 是否在需要时将引用隐式转换为值?
- r - 主成分分析
- java - GUI 在 SwingWorker 线程中因长时间运行的任务而冻结
- python - 如果该值在可能的数字范围内,则为该值分配一个字母
- android - 存储库类中的协程范围
- javascript - 给出普通对象时React Redux同步操作返回错误
- python - os.popen 函数未分配给我的 var
- svg - 如何使用 PocketSVG 在 SwiftUI 中显示整个 SVG 图像?