我需要打开给定的谷歌驱动器文件夹中的 Excel 文件并读取其数据。为此,我使用了以下代码。
var folders = DriveApp.getFoldersByName("Test Folder");
var foldersnext = folders.next();
var files = foldersnext.getFiles(); // get all files from folder
while(files.hasNext()) {
var sheets = SpreadsheetApp.openByUrl(files.next().getUrl()); // Line A
}
但它在“A 行”中给出了这样的错误;
文档 1LDVkBTnkcY32ni9WoGDn6xHonPOX87ZV 丢失(可能是
已删除,或者您没有读取权限?)
但是当使用以下方式记录文件的 ID 时,
var selectedFile = files.next();
Logger.log(selectedFile.getId());
它给了我预期的结果。所以,我认为错误在于将文件转换为Excel文件。请给我一个解决方案打开给定文件夹中的多个Excel文件并读取其数据...
该项目有以下范围
- https://www.googleapis.com/auth/drive.readonly https://www.googleapis.com/auth/drive.readonly
- https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/spreadsheets
- 您想要从 Google 云端硬盘上的 Excel 文件中检索值。
- Excel 文件放置在“测试文件夹”的文件夹中。
如果我的理解是正确的,那么这个修改怎么样?
修改点:
- In order to retrieve values from Excel file, at first, the Excel file is required to be converted to Google Spreadsheet. After converted it, the values can be retrieved by Spreadsheet Service.
- 认为错误的原因是由于电子表格服务尝试打开Excel文件。
- 在这个修改后的脚本中,我使用了
Drive.Files.copy()
用于从 Excel 文件转换为 Google 电子表格。
运行脚本之前:
运行脚本时,请在高级 Google 服务中启用 Drive API,如下所示。此修改后的脚本使用高级 Google 服务的 Drive API。
- On script editor
- 资源 -> 高级 Google 服务
- 启用云端硬盘 API v2
修改后的脚本:
请按如下方式修改您的脚本。
From:
while(files.hasNext()) {
var sheets = SpreadsheetApp.openByUrl(files.next().getUrl()); // Line A
}
To:
while(files.hasNext()) {
var file = files.next();
if (file.getMimeType() == MimeType.MICROSOFT_EXCEL || file.getMimeType() == MimeType.MICROSOFT_EXCEL_LEGACY) {
var resource = {
title: file.getName(),
parents: [{id: foldersnext.getId()}],
mimeType: MimeType.GOOGLE_SHEETS
};
var spreadsheet = Drive.Files.copy(resource, file.getId());
var sheets = SpreadsheetApp.openById(spreadsheet.id);
}
}
Note:
- 如果 Excel 文件很大,可能会出现错误。
- 如果 Excel 文件数量很大,可能会出现错误。在这种情况下,请告诉我。
- 在此示例脚本中,转换后的电子表格将创建到 Excel 文件的同一文件夹中。如果您想在检索值后删除文件,请使用
Drive.Files.remove(fileId)
.
参考:
- 文件:复制 https://developers.google.com/drive/api/v2/reference/files/copy
- 文件:删除 https://developers.google.com/drive/api/v2/reference/files/delete
- 电子表格服务 https://developers.google.com/apps-script/reference/spreadsheet/
如果我误解了你的问题并且这不是你想要的结果,我深表歉意。
Edit:
从你的评论中,发现我的理解是正确的。那么作为一个测试用例,你能测试一下下面的流程吗?
- 创建新文件夹。
- Put an Excel file in the created folder.
- 请复制文件夹 ID。该文件夹 ID 在脚本中使用。
- 请确认高级 Google 服务中是否启用了 Drive API。
-
运行以下示例脚本。运行之前,请设置文件夹ID。
function sample() {
var folderId = "###"; // Please set the folder ID.
var folder = DriveApp.getFolderById(folderId);
var files = folder.getFiles();
while(files.hasNext()) {
var file = files.next();
if (file.getMimeType() == MimeType.MICROSOFT_EXCEL || file.getMimeType() == MimeType.MICROSOFT_EXCEL_LEGACY) {
var resource = {
title: file.getName(),
parents: [{id: folderId}],
mimeType: MimeType.GOOGLE_SHEETS
};
var spreadsheet = Drive.Files.copy(resource, file.getId());
var sheet = SpreadsheetApp.openById(spreadsheet.id).getSheets()[0];
var value = sheet.getDataRange().getValues();
Logger.log(value)
}
}
}
- 运行函数
sample()
在脚本编辑器中。
- After the script is finished, please check the log.
- 如果您可以在日志中看到Excel文件的值,则发现该脚本有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)