#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. Я не был знаком с обслуживанием недвижимости, пока не увидел ваш ответ. Я думаю, что это может сработать, я попробую. Спасибо вам за предложение.