如何使用 google 脚本打开位于 google 驱动器文件夹中的 excel 文件?
How to open excel files, which are located in a google drive folder with google script?
我需要打开给定 google 驱动器文件夹中的 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
}
但是它在 "Line A" 中给出了这样的错误;
Document 1LDVkBTnkcY32ni9WoGDn6xHonPOX87ZV is missing (perhaps it was
deleted, or you don't have read access?)
但是当使用 Log 文件的 ID 时,
var selectedFile = files.next();
Logger.log(selectedFile.getId());
它给了我预期的结果。所以,我认为错误在于将文件转换为 excel 文件。请给我一个 打开给定文件夹中的多个 excel 文件并读取其数据的解决方案...
这个项目有以下范围
- 您想从 Google 驱动器上的 Excel 文件中检索值。
- Excel 个文件放在 "Test Folder".
个文件夹中
如果我的理解是正确的,这个修改怎么样?
修改点:
- 为了从 Excel 文件中检索值,首先需要将 Excel 文件转换为 Google 电子表格。转换后,电子表格服务可以检索这些值。
- 错误的原因被认为是由于 Excel 文件试图通过电子表格服务打开。
- 在此修改后的脚本中,我使用
Drive.Files.copy()
将 Excel 文件转换为 Google 电子表格。
在 运行 脚本之前:
当您运行脚本时,请在高级Google服务中启用驱动器API,如下所示。此修改后的脚本使用高级 Google 服务的驱动器 API。
- 在脚本编辑器上
- 资源 -> 高级 Google 服务
- 打开驱动器 API v2
修改后的脚本:
请按如下方式修改您的脚本。
从:
while(files.hasNext()) {
var sheets = SpreadsheetApp.openByUrl(files.next().getUrl()); // Line A
}
到:
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);
}
}
注:
- 如果Excel文件很大,可能会出错。
- 如果Excel个文件的数量很大,可能会出现错误。在这种情况下,请告诉我。
- 在此示例脚本中,将转换后的电子表格创建到与 Excel 文件相同的文件夹中。如果要在检索值后删除文件,请使用
Drive.Files.remove(fileId)
.
参考文献:
如果我误解了您的问题而这不是您想要的结果,我深表歉意。
编辑:
从您的评论中,发现我的理解是正确的。那么作为一个测试用例,你能测试下面的流程吗?
- 新建文件夹。
- 将Excel文件放入创建的文件夹中。
- 请复制文件夹 ID。此文件夹 ID 在脚本中使用。
- 请确认驱动器 API 是否在高级 Google 服务中启用。
运行 下面的示例脚本。在运行之前,请设置文件夹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()
的功能。
- 脚本完成后,请检查日志。
- 如果您可以在日志中看到 Excel 文件的值,则表明该脚本有效。
我需要打开给定 google 驱动器文件夹中的 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
}
但是它在 "Line A" 中给出了这样的错误;
Document 1LDVkBTnkcY32ni9WoGDn6xHonPOX87ZV is missing (perhaps it was deleted, or you don't have read access?)
但是当使用 Log 文件的 ID 时,
var selectedFile = files.next();
Logger.log(selectedFile.getId());
它给了我预期的结果。所以,我认为错误在于将文件转换为 excel 文件。请给我一个 打开给定文件夹中的多个 excel 文件并读取其数据的解决方案...
这个项目有以下范围
- 您想从 Google 驱动器上的 Excel 文件中检索值。
- Excel 个文件放在 "Test Folder". 个文件夹中
如果我的理解是正确的,这个修改怎么样?
修改点:
- 为了从 Excel 文件中检索值,首先需要将 Excel 文件转换为 Google 电子表格。转换后,电子表格服务可以检索这些值。
- 错误的原因被认为是由于 Excel 文件试图通过电子表格服务打开。
- 在此修改后的脚本中,我使用
Drive.Files.copy()
将 Excel 文件转换为 Google 电子表格。
在 运行 脚本之前:
当您运行脚本时,请在高级Google服务中启用驱动器API,如下所示。此修改后的脚本使用高级 Google 服务的驱动器 API。
- 在脚本编辑器上
- 资源 -> 高级 Google 服务
- 打开驱动器 API v2
修改后的脚本:
请按如下方式修改您的脚本。
从:while(files.hasNext()) {
var sheets = SpreadsheetApp.openByUrl(files.next().getUrl()); // Line A
}
到:
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);
}
}
注:
- 如果Excel文件很大,可能会出错。
- 如果Excel个文件的数量很大,可能会出现错误。在这种情况下,请告诉我。
- 在此示例脚本中,将转换后的电子表格创建到与 Excel 文件相同的文件夹中。如果要在检索值后删除文件,请使用
Drive.Files.remove(fileId)
.
参考文献:
如果我误解了您的问题而这不是您想要的结果,我深表歉意。
编辑:
从您的评论中,发现我的理解是正确的。那么作为一个测试用例,你能测试下面的流程吗?
- 新建文件夹。
- 将Excel文件放入创建的文件夹中。
- 请复制文件夹 ID。此文件夹 ID 在脚本中使用。
- 请确认驱动器 API 是否在高级 Google 服务中启用。
运行 下面的示例脚本。在运行之前,请设置文件夹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()
的功能。 - 脚本完成后,请检查日志。
- 如果您可以在日志中看到 Excel 文件的值,则表明该脚本有效。