Как открыть файлы Excel, которые находятся в папке на диске Google с помощью скрипта Google? - PullRequest
2 голосов
/ 16 мая 2019

Мне нужно открыть файлы Excel в заданной папке на диске Google и прочитать ее данные.Для этого я использовал следующий код:

  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 отсутствует (возможно, он был удален,или у вас нет прав на чтение?)

Но когда регистрируются идентификаторы файлов, используя,

var selectedFile = files.next();
Logger.log(selectedFile.getId()); 

Это дает мне ожидаемый результат.Итак, я думаю, что ошибка заключается в преобразовании файла в файл Excel.Пожалуйста, дайте мне решение открыть несколько файлов Excel в данной папке и прочитать ее данные ...

Этот проект имеет следующие области действия

1 Ответ

1 голос
/ 16 мая 2019
  • Вы хотите получить значения из файла 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:

К сожалению, из вашего комментария я не смог понять вашу проблему. Я думаю, что это связано с моим плохим знанием английского языка. Я прошу прощения за это. Но из вашего комментария выяснилось, что мое понимание было правильным. Итак, в качестве контрольного примера, можете ли вы проверить следующий поток?

  1. Создать новую папку.
  2. Поместите файл Excel в созданную папку.
    • Пожалуйста, скопируйте идентификатор папки. Этот идентификатор папки используется в скрипте.
  3. Пожалуйста, подтвердите, включен ли Drive API в Advanced Google Services.
  4. Запустите следующий пример сценария. Перед запуском установите идентификатор папки.

    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)
        }
      }
    }
    
  5. Запустите функцию sample() в редакторе скриптов.
  6. После завершения скрипта, пожалуйста, проверьте журнал.
    • Если вы видите значения файла Excel в журнале, обнаруживается, что скрипт работает.
...