- Вы хотите получить значения из файла Excel на вашем Google Диске.
- Файлы Excel помещаются в папку «Тестовая папка».
Если мое понимание верно, как насчет этой модификации? Пожалуйста, подумайте об этом как об одном из нескольких ответов.
Точка модификации:
- Чтобы извлечь значения из файла Excel, сначала файл Excel необходимо преобразовать в электронную таблицу Google. После преобразования значения можно получить с помощью службы электронных таблиц.
- Считается, что причиной ошибки является попытка открытия файла Excel службой электронных таблиц.
- В этом измененном сценарии я использовал
Drive.Files.copy()
для преобразования из файла Excel в таблицу Google.
Перед запуском скрипта:
При запуске сценария включите Drive API в Advanced Google Services следующим образом. В этом модифицированном скрипте использовался Drive API расширенных служб Google.
- в редакторе сценариев
- Ресурсы -> Расширенные услуги Google
- Включить Drive 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)
.
Ссылки
Если я неправильно понял ваш вопрос, и это был не тот результат, которого вы хотите, я прошу прощения.
Edit:
К сожалению, из вашего комментария я не смог понять вашу проблему. Я думаю, что это связано с моим плохим знанием английского языка. Я прошу прощения за это. Но из вашего комментария выяснилось, что мое понимание было правильным. Итак, в качестве контрольного примера, можете ли вы проверить следующий поток?
- Создать новую папку.
- Поместите файл Excel в созданную папку.
- Пожалуйста, скопируйте идентификатор папки. Этот идентификатор папки используется в скрипте.
- Пожалуйста, подтвердите, включен ли Drive API в Advanced Google Services.
Запустите следующий пример сценария. Перед запуском установите идентификатор папки.
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 в журнале, обнаруживается, что скрипт работает.