SpreadsheetApp 无法使用 DriveApp 返回的 Id openById
SpreadsheetApp unable to openById with Id returned by DriveApp
我正在尝试创建一个脚本:
- 从一个电子表格中读取一个值
- 在 google 驱动器文件夹中搜索名称与第一个电子表格中的值匹配的第二个电子表格文件,并获取该文件的 ID
- 使用 id 打开第二个电子表格,读取一些数据,并将该数据写入第一个电子表格
脚本执行 return 一个 ID,但我收到错误:“异常:获取方法或 属性 对象 SpreadsheetApp 上的 openById 时出现意外错误。”我在我的 Logger.log 中检查了 id returned 以查看它是否与我希望脚本查找的文件匹配,但 id 不匹配。我还检查了 Url 是否与我想要的电子表格匹配,它们确实匹配。不幸的是,当我尝试 openByUrl 方法时,我得到了同样的错误。
不知何故,脚本似乎找到了正确的电子表格,但无法打开它。
这是我的代码
function getUnitMap() {
//Create search key using module name
var moduleName = ss.getSheetByName("Select Module/Agenda").getRange("j17").getValue();
var searchFor = 'title contains "' + moduleName + ' Unit Map"';
Logger.log(searchFor);
//Use search key to find file in google drive folder
var dApp = DriveApp;
var folder = dApp.getFolderById("1Bhv_yQ6bsDmIjfO5yLsxu61vyEPjL8zj");
var files = folder.searchFiles(searchFor);
var fileIds = [];
var fileUrls = [];
while (files.hasNext()) {
var file = files.next();
fileIds.push(file.getId());
fileUrls.push(file.getUrl());
}
Logger.log(fileIds);
Logger.log(fileUrls);
//Write data from searched for file to original spreadsheet
var srcSs = SpreadsheetApp.openById(fileIds);
var srcSheet = srcSs.getSheetByName("Curriculum Map");
var srcValues = srcSheet.getRange(20, 1, srcSheet.getLastRow(), srcSheet.getLastColumn()).getValues();
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Unit Map");
targetSheet.getRange().setValues(srcValues);
}
我想知道这个问题是否部分是由于我正在搜索的文件夹位于共享驱动器中。有没有办法更改我的代码以反映这一点?
var srcSs = SpreadsheetApp.openById(fileIds);
openById 需要一个不是id数组 如果只有一个id那么应该是fileIds[0]
我正在尝试创建一个脚本:
- 从一个电子表格中读取一个值
- 在 google 驱动器文件夹中搜索名称与第一个电子表格中的值匹配的第二个电子表格文件,并获取该文件的 ID
- 使用 id 打开第二个电子表格,读取一些数据,并将该数据写入第一个电子表格
脚本执行 return 一个 ID,但我收到错误:“异常:获取方法或 属性 对象 SpreadsheetApp 上的 openById 时出现意外错误。”我在我的 Logger.log 中检查了 id returned 以查看它是否与我希望脚本查找的文件匹配,但 id 不匹配。我还检查了 Url 是否与我想要的电子表格匹配,它们确实匹配。不幸的是,当我尝试 openByUrl 方法时,我得到了同样的错误。
不知何故,脚本似乎找到了正确的电子表格,但无法打开它。 这是我的代码
function getUnitMap() {
//Create search key using module name
var moduleName = ss.getSheetByName("Select Module/Agenda").getRange("j17").getValue();
var searchFor = 'title contains "' + moduleName + ' Unit Map"';
Logger.log(searchFor);
//Use search key to find file in google drive folder
var dApp = DriveApp;
var folder = dApp.getFolderById("1Bhv_yQ6bsDmIjfO5yLsxu61vyEPjL8zj");
var files = folder.searchFiles(searchFor);
var fileIds = [];
var fileUrls = [];
while (files.hasNext()) {
var file = files.next();
fileIds.push(file.getId());
fileUrls.push(file.getUrl());
}
Logger.log(fileIds);
Logger.log(fileUrls);
//Write data from searched for file to original spreadsheet
var srcSs = SpreadsheetApp.openById(fileIds);
var srcSheet = srcSs.getSheetByName("Curriculum Map");
var srcValues = srcSheet.getRange(20, 1, srcSheet.getLastRow(), srcSheet.getLastColumn()).getValues();
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Unit Map");
targetSheet.getRange().setValues(srcValues);
}
我想知道这个问题是否部分是由于我正在搜索的文件夹位于共享驱动器中。有没有办法更改我的代码以反映这一点?
var srcSs = SpreadsheetApp.openById(fileIds);
openById 需要一个不是id数组 如果只有一个id那么应该是fileIds[0]