GSheet Excel Экспорт — Метод пути к папке для общего диска

#google-apps-script #google-sheets

Вопрос:

Хорошо, команда,

Вот небольшой скрипт Google, который я написал, он выполняет то, что должен делать, но он не очень…элегантный … может быть, есть другой способ сделать это, которого я не знаю.

Цель состоит в том, чтобы экспортировать вкладки GSheet в файлы Excel и сохранить их в определенной папке на общем диске компании под названием «Еженедельные приложения». GSheet также находится на общем диске, и разбивка структуры папок зависит от конкретного проекта.

Это 3 листа, которые необходимо экспортировать, и я использую URL-адрес, чтобы извлечь идентификатор и сохранить его в Excel.

Проблема, с которой я столкнулся, заключается в поиске пути к папке для сохранения экспорта. Я использовал следующий метод, чтобы найти нужную папку Еженедельных приложений на общем диске:

  var ssparents = DriveApp.getFileById(SSid).getParents().next().getId();
 var saveFolderID = DriveApp.getFolderById(ssparents).getParents().next().getFoldersByName("08-Reports").next().getFoldersByName("03-Weekly").next().getFoldersByName("Weekly Appendices").next().getId();
 

Я признаю, что не до конца понимаю, как использовать FolderIterator, но приведенный выше код несколько работает.
Я поделюсь остальной частью кода ниже, но приведенное выше иллюстрирует проблему пути.
Существует ограничение, которое не позволяет мне использовать номер идентификатора папки для прямой ссылки.
Ограничение заключается в следующем: GSheet используется в нескольких проектах на одном и том же общем диске с идентичной структурой папок. Поэтому руководство хочет иметь возможность скопировать/вставить GSheet и подготовить его к использованию в другом месте диска. Поэтому, если вы следите за мной, путь к папке Еженедельных приложений всегда один и тот же, но идентификатор папки меняется, когда GSheet копируется в новый проект. Следовательно, почему я попробовал этот метод вместо использования идентификатора папки для еженедельных приложений.

Этот метод привередлив, иногда он не работает по причине, которую я не могу понять, но простой сброс или изменение имени папки устраняет проблему. Так что, если у кого-нибудь из вас есть какие-то отзывы, я бы с удовольствием их выслушал.

Вот остальная часть кода:

  function exportSpreadsheet(){

          //Copy sheets to export tab
    CopyCP(); 
    SpreadsheetApp.flush();
    CopyRFI();
    SpreadsheetApp.flush();
    CopyTrend();
    SpreadsheetApp.flush();

            //export date for document title

    const date = new Date();
    const nextDate = new Date();
    nextDate.setDate(date.getDate() -1);
    var weekEndDate = Utilities.formatDate(nextDate,"GMT-6", "yyyy-MM-dd");
    console.log(weekEndDate)

            //URL extraction for Excel export

    var SS = SpreadsheetApp.getActiveSpreadsheet();

      var SSid = SS.getId();

      var RFIWeekly = SS.getSheetByName("Export RFI Weekly Report");
      var RFIid = RFIWeekly.getSheetId();

      var CPWeekly = SS.getSheetByName("Export CP Weekly Report");
      var CPid = CPWeekly.getSheetId();

      var TrendWeekly = SS.getSheetByName("Export Trend Weekly Report");
      var Trendid = TrendWeekly.getSheetId();


      var urlCP = "https://docs.google.com/spreadsheets/d/" SSid "/export?format=xlsxamp;gid=" CPid;
      var urlRFI = "https://docs.google.com/spreadsheets/d/" SSid "/export?format=xlsxamp;gid=" RFIid;
      var urlTrend = "https://docs.google.com/spreadsheets/d/" SSid "/export?format=xlsxamp;gid=" Trendid;

          

    var ssparents = DriveApp.getFileById(SSid).getParents().next().getId();
    var saveFolderID = DriveApp.getFolderById(ssparents).getParents().next().getFoldersByName("08-Reports").next().getFoldersByName("03-Weekly").next().getFoldersByName("Weekly Appendices").next().getId();


        var params = {method:"GET",headers:{"authorization":"Bearer "  ScriptApp.getOAuthToken()}};

              //Save CP

      var responseCP = UrlFetchApp.fetch(urlCP, params).getBlob();

      DriveApp.getFolderById(saveFolderID).createFile(responseCP).setName("Appendix D CP Log -"   weekEndDate);

              //Save RFI

       var responseRFI = UrlFetchApp.fetch(urlRFI, params).getBlob();

      DriveApp.getFolderById(saveFolderID).createFile(responseRFI).setName("Appendix C RFI Log -"   weekEndDate);


              //Save Trend

       var responseTrend = UrlFetchApp.fetch(urlTrend, params).getBlob();

      DriveApp.getFolderById(saveFolderID).createFile(responseTrend).setName("Appendix E Trend Log - "   weekEndDate);

     }
 

Комментарии:

1. Во-первых, я должен извиниться за свое плохое знание английского языка. К сожалению, я не могу понять вашу текущую проблему с вашим сценарием. Могу я спросить вас о деталях вашей текущей проблемы и вашей цели?

2. Проблема здесь в том, чтобы найти идентификатор папки, в которую вы хотите сохранить файл?

3. Извините, я перечитываю свой пост и вижу, что это не совсем понятно. Да, проблема в том, что скрипт не всегда находит идентификатор папки для «Еженедельных приложений». Иногда это так, а иногда нет. Даже если путь к папке, как описано в коде, никогда не меняется. Я уже убедился, что все струны совпадают. Цель такова: я хочу сохранить экспорт Excel в папке «Еженедельные приложения», которая находится в другом месте на общем диске. Как я уже упоминал, это несколько папок с одним и тем же именем. Поэтому я попытался «жестко закодировать» путь к папке для соответствующих «Еженедельных приложений».

4. Вы проверили, используя службу свойств , чтобы сохранить там идентификатор папки, таким образом, вы не будете «жестко кодировать» идентификатор в скрипте, но вам не придется искать его каждый раз

5. Я не был знаком с обслуживанием недвижимости, пока не увидел ваш ответ. Я думаю, что это может сработать, я попробую. Спасибо вам за предложение.