google-apps-script - 应用程序脚本将多个范围从一张工作表复制到另一个电子表格
问题描述
我正在尝试将数据从一个电子表格复制到另一个电子表格,我已经成功实现了我在网上找到的适用于特定范围的东西
function cloneGoogleSheet() {
// source doc
var sss = SpreadsheetApp.openById("spreadsheetkey1");
// source sheet
var ss = sss.getSheetByName('_tab_name_source');
// Get full range of data
var SRange = ss.getRange(7,3,5,1);
// get A1 notation identifying the range
var A1Range = SRange.getA1Notation();
// get the data values in range
var SData = SRange.getValues();
// target spreadsheet
var tss = SpreadsheetApp.openById("spreadsheetkey2");
// target sheet
var ts = tss.getSheetByName('tab_name_destination');
// Clear the Google Sheet before copy
//ts.clear({contentsOnly: true});
// set the target range to the values of the source data
ts.getRange(A1Range).setValues(SData);
};
上面的代码工作完美,但是我需要复制 18 个不同的范围,我不能只合并到 1 个范围中。我考虑过使用上面的选项,但是对于每个范围“乘”它 18 次,但这似乎是一个非常不雅的解决方案。
我找到了一个可行的解决方案,如果它保留在同一个电子表格中,因为它使用 copyto 而不是获取/设置值。值部分完美地工作,因为它不会与合并单元格格式混淆。在将以下工作代码与第一个代码中的元素合并以制作工作脚本方面,我一直在苦苦挣扎 2-3 个小时。
function test () {
try {
var spread = SpreadsheetApp.openById("spreadsheetkey");
var sheet = spread.getSheetByName("tab_name_source");
var rlist = sheet.getRangeList(["c7:c11", "g7:g11", "k7:k11"]);
sheet = spread.getSheetByName("tab_name_destination");
for( var i=0; i<rlist.getRanges().length; i++ ) {
var r1 = rlist.getRanges()[i];
var r2 = sheet.getRange(r1.getA1Notation());
r1.copyto(r2);
}
}
catch(err) {
Logger.log(err);
}
}
我最初尝试将第二段编码调整为使用 setvalues,但是我无法在此代码范围内成功实现 getvalues 的一部分。我想一旦我让这段代码使用 get 和 set values 而不是 Copyto 我只需要添加另一个电子表格的电子表格 ID 即可获得最终结果
解决方案
尝试这个:
function myFunction() {
var sourceSS = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = sourceSS.getSheetByName("sheetname");
var targetSS = SpreadsheetApp.openById("spreadsheet id here");
var targetSheet = targetSS.getSheetByName("Sheet1");
var ranges = ["C7:C11", "G7:G11", "K7:K11"];
ranges.forEach(range => {
var data = sourceSheet.getRange(range).getValues();
targetSheet.getRange(range).setValues(data);
})
}
源表:
目的地表:
参考:
推荐阅读
- c# - 如何使用正则表达式将字符串`{{key.value}}`拆分为两个字符串`key`和`value`?
- java - 使用 pagefactory 时出现 NullPointerException
- asp.net - 在 .NET 框架 SDK 样式的 web 项目中启动浏览器
- express - 我们如何在 Expressjs 中使部分路由可选?
- flutter - Flutter/Dart:从 Switch/Case 返回值
- c# - 单击按钮后单元格颜色更改
- wpf - 如果等于和 gethashcode,wpf 绑定不刷新(不需要 IPROPERTYCHANGED!)
- docker - 在 Kubernetes 上发布新版本时自动更新容器镜像
- php - 如何使用 php 转义要在 Highcharts 中显示的数据中的单引号?
- rest - 使用 RestTemplate 中的交换方法时,如何解决 HttpMessageConverterExtractor 错误?