Google Apps Script создает листы версии файла Excel.Проблема с многократным созданием версий. - PullRequest
0 голосов
/ 22 ноября 2018

Я нашел решение для моего первоначального вопроса в другом посте Google Apps Script создает листы версии файла Excel .

При тестировании с кодом, приведенным в ответе, я столкнулся с другой проблемой.Каждый раз, когда я запускаю скрипт, он снова создает версию .xlsx файлов в виде электронных таблиц, даже если они уже существуют.Я попытался изменить код с последним, если без результатов.Затем вернулся к запуску вашего кода в том виде, в каком он был опубликован, на случай, если я что-то пропустил, но он продолжает создавать версии тех же файлов.

Любая идея о том, что я могу сделать, чтобы это исправить, будет очень признательна.

Код, указанный в ответе, следующий.

// Convert the user's stored excel files to google spreadsheets based on the specified directories.
// There are quota limits on the maximum conversions per day: consumer @gmail = 250.
function convertExcelToGoogleSheets() 
{
  var user = Session.getActiveUser(); // Used for ownership testing.
  var origin = DriveApp.getFolderById("origin folder id");
  var dest = DriveApp.getFolderById("destination folder id");

  // Index the filenames of owned Google Sheets files as object keys (which are hashed).
  // This avoids needing to search and do multiple string comparisons.
  // It takes around 100-200 ms per iteration to advance the iterator, check if the file
  // should be cached, and insert the key-value pair. Depending on the magnitude of
  // the task, this may need to be done separately, and loaded from a storage device instead.
  // Note that there are quota limits on queries per second - 1000 per 100 sec:
  // If the sequence is too large and the loop too fast, Utilities.sleep() usage will be needed.
  var gsi = dest.getFilesByType(MimeType.GOOGLE_SHEETS), gsNames = {};
  while (gsi.hasNext())
  {
    var file = gsi.next();
    if(file.getOwner().getEmail() == user.getEmail())
      gsNames[file.getName()] = true;
  }

  // Find and convert any unconverted .xls, .xlsx files in the given directories.
  var exceltypes = [MimeType.MICROSOFT_EXCEL, MimeType.MICROSOFT_EXCEL_LEGACY];
  for(var mt = 0; mt < exceltypes.length; ++mt)
  {
    var efi = origin.getFilesByType(exceltypes[mt]);
    while (efi.hasNext())
    {
      var file = efi.next();
      // Perform conversions only for owned files that don't have owned gs equivalents.
      // If an excel file does not have gs file with the same name, gsNames[ ... ] will be undefined, and !undefined -> true
      // If an excel file does have a gs file with the same name, gsNames[ ... ] will be true, and !true -> false
      if(file.getOwner().getEmail() == user.getEmail() && !gsNames[file.getName()])
      {
        Drive.Files.insert(
          {title: file.getName(), parents: [{"id": dest.getId()}]},
          file.getBlob(),
          {convert: true}
        );
        // Do not convert any more spreadsheets with this same name.
        gsNames[file.getName()] = true;
      }
    }
  }
}

1 Ответ

0 голосов
/ 22 ноября 2018
  • Вы хотите преобразовать файлы Excel из папки origin в электронную таблицу Google и поместить преобразованную электронную таблицу в папку dest.
  • Когда имя файла преобразованного файла существует в папке dest, вы не хотите конвертировать его.

Если мое понимание верно, как насчет этой модификации?

От:

if(file.getOwner().getEmail() == user.getEmail() && !gsNames[file.getName()])

Кому:

if(file.getOwner().getEmail() == user.getEmail() && !gsNames[file.getName().split(".")[0]])

Примечание:

  • В этой модификации, когда имя файла преобразованного файла находится в папке dest, файл не преобразуется.
  • Когдаимя файла имеет расширение, например ###.xlsx, и оно преобразуется в таблицу Google, кажется, что расширение автоматически удаляется.Я думаю, что это причина того, что дублированные файлы создаются.Поэтому я использовал split(".")[0] для этой ситуации.

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...