如何通过URL获取Google表格数据并批量同步模板修改至派生表格?
问题解答
1. 从关闭的模板表格获取指定范围值的正确方法
getActiveSpreadsheet() 方法不能传入URL参数,它仅用于获取当前正在操作的活动表格。要访问已关闭的模板表格,你需要使用 SpreadsheetApp.openByUrl() 或 SpreadsheetApp.openById() 方法:
openByUrl():直接传入表格的完整URLopenById():传入表格URL中/d/和/edit之间的ID字符串
另外你原代码中getRange([A6],[I2:I])的写法也不正确,正确的范围引用应该是字符串格式,示例代码如下:
// 用URL打开模板表格 var sourceSpreadsheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/你的模板ID/edit"); // 获取指定工作表 var sourceSheet = sourceSpreadsheet.getSheetByName("LEGENDE PROJET"); // 获取A6单元格的值 var a6Value = sourceSheet.getRange("A6").getValue(); // 获取I2到I列最后一行的所有值 var iRangeValues = sourceSheet.getRange("I2:I" + sourceSheet.getLastRow()).getValues();
2. 批量更新现有表格的必要操作
必须通过openByUrl(url)逐个打开表格,因为Google Apps Script中所有对表格内容的写入操作,都需要先创建对应的Spreadsheet对象,没有无需打开直接写入的机制。
你可以通过循环遍历所有目标表格的URL列表,逐个打开并更新内容,示例代码如下:
// 存储所有目标表格的URL数组 var targetUrls = [ "https://docs.google.com/spreadsheets/d/目标表格1ID/edit", "https://docs.google.com/spreadsheets/d/目标表格2ID/edit" ]; // 从模板获取需要同步的数据 var sourceSpreadsheet = SpreadsheetApp.openByUrl("你的模板URL"); var sourceSheet = sourceSpreadsheet.getSheetByName("LEGENDE PROJET"); var syncData = sourceSheet.getRange("I2:I" + sourceSheet.getLastRow()).getValues(); // 循环更新每个目标表格 targetUrls.forEach(function(url) { var targetSpreadsheet = SpreadsheetApp.openByUrl(url); var targetSheet = targetSpreadsheet.getSheetByName("LEGENDE PROJET"); // 清空目标范围并写入新数据 var targetRange = targetSheet.getRange("I2:I" + targetSheet.getLastRow()); targetRange.clearContent(); targetSheet.getRange(2, 9, syncData.length, 1).setValues(syncData); });
内容的提问来源于stack exchange,提问作者antho2B
相关产品推荐
相关产品推荐

