Скрипт Google Sheets - загрузка файла из папки на диске - PullRequest
0 голосов
/ 19 января 2019

У меня есть таблица, которая является шаблоном.У меня есть кнопка отправки, которая сохраняет данные в файле (по дате и имени клиента) в папку на Google Диске.

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

function onOpen() {
list_all_files_inside_one_folder_without_subfolders() }


function list_all_files_inside_one_folder_without_subfolders() {
  var sh = SpreadsheetApp.getActiveSheet();
  var folder = DriveApp.getFolderById('0B8xnkPYxGFbUMktOWm14TVA3Yjg'); // I change the folder ID  here 
  var list = [];
  list.push(['Name']); //,'ID','Size']);
  var files = folder.getFiles();
  while (files.hasNext()){
    file = files.next();
    var row = []
    row.push(file.getName()) //,file.getId(),file.getSize())
    list.push(row);
  }
   sh.getRange(2,2,list.length,list[0].length).setValues(list);
}

function onEdit(e) {


  openFile() }



function openFile(e) {
  var sheet = "Sheet1"; // Please set the sheet with the dropdown list.
  var range = "A1"; // Please set the range of dropdown list.
  if (e.source.getSheetName() == sheet && e.range.getA1Notation() == range) {
    var file = DriveApp.getFilesByName(e.value);
    if (file.hasNext()) {
      var f = file.next();
      var url = f.getUrl();
      var script = "<script>window.open('" + url + "', '_blank').focus();google.script.host.close()</script>";
  var html = HtmlService.createHtmlOutput(script);
  SpreadsheetApp.getUi().showModalDialog(html, 'Open ' + f.getName());
    }
  }
}

Затем я создал выпадающий списокиз этих файлов по имени.Я хочу создать сценарий OnEdit, который может открыть файл (выбрав в раскрывающемся меню имя файла).

Есть ли какие-нибудь указатели о том, как это сделать?

1 Ответ

0 голосов
/ 20 января 2019
  • У вас уже есть выпадающий список.
  • Когда вы выбираете одно из имен файлов из выпадающего списка, вы хотите открыть файл как новую вкладку браузера.

Я понял ваш вопрос, как указано выше. Как насчет этого примера сценария? Процесс этого примера сценария выглядит следующим образом.

  1. Выберите имя файла в раскрывающемся списке.
  2. Когда имя файла существует, откройте диалоговое окно для запуска Javascript, и выбранный файл откроется на новой вкладке браузера.
  3. Когда новая вкладка открыта, фокус перемещается на новую вкладку.
  4. После открытия новой вкладки диалоговое окно электронных таблиц закрывается.

Пример сценария:

Когда вы используете этот пример сценария, выполните следующую последовательность действий.

  1. Скопируйте и вставьте следующий пример сценария в связанный скрипт таблицы, в которой есть раскрывающийся список.
  2. Этот скрипт использует событие OnEdit. Поэтому, пожалуйста, установите триггер OnEdit на openFile().
  3. Пожалуйста, измените Sheet1 из var sheet = "Sheet1". В этом примере предполагается, что раскрывающийся список помещен в «Лист1».
  4. Пожалуйста, измените A1 из var range = "A1". В этом примере предполагается, что раскрывающийся список помещается в ячейку «A1».
Автор сценария:
function openFile(e) {
  var sheet = "Sheet1"; // Please set the sheet with the dropdown list.
  var range = "A1"; // Please set the range of dropdown list.
  if (e.source.getSheetName() == sheet && e.range.getA1Notation() == range) {
    var file = DriveApp.getFilesByName(e.value);
    if (file.hasNext()) {
      var f = file.next();
      var url = f.getUrl();
      var script = "<script>window.open('" + url + "', '_blank').focus();google.script.host.close()</script>";
      var html = HtmlService.createHtmlOutput(script);
      SpreadsheetApp.getUi().showModalDialog(html, 'Open ' + f.getName());
    }
  }
}

Примечание:

  • После установки выше, когда вы выбираете одно из имен файлов в раскрывающемся списке, файл открывается как новая вкладка.
  • Этот скрипт представляет собой простой пример. Поэтому, пожалуйста, измените его для вашей ситуации.
  • В этом примере сценария, когда есть несколько файлов с одинаковым именем файла, открывается первый найденный файл. Если вы хотите изменить его, измените сценарий для вашей ситуации.

Ссылки:

Edit:

Причина проблемы function onEdit(e) {openFile()}. e из onEdit(e) не присваивается openFile(). При этом возникает такая ошибка. Поэтому, пожалуйста, установите триггер OnEdit для функции openFile(). Поэтому, пожалуйста, сделайте следующее.

  1. Удалить функцию onEdit().
  2. Установите openFile() в качестве триггера OnEdit.
    • При этом, когда вы выбираете имя файла в раскрывающемся списке, openFile() автоматически запускается установленным триггером. В это время дается объект события.

Как установить триггер OnEdit:

  1. Откройте редактор скриптов.
  2. Редактировать -> Триггеры текущего проекта.
  3. Нажмите «Добавить триггер».
  4. Установите "openFile" для "Выберите, какую функцию запускать".
  5. Установите «Из электронной таблицы» для «Выбрать источник события».
  6. Установите «При редактировании» для «Выберите тип события».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...