Экспорт содержимого строки в текстовый файл с определенной структурой - PullRequest
2 голосов
/ 16 апреля 2019

У меня есть лист Google, связанный с формой Google.Я хотел бы экспортировать содержимое каждой строки в новый текстовый файл каждый раз, когда дается новый ответ (строка), как в примере (см. Рисунок в приложении).Дополнительная сложность заключается в том, что я хотел бы структурировать файл, как в примере, используя текст в первой строке, указав значение и добавив возврат каретки.

Click to see picture

IЯ использую в качестве отправной точки прилагаемый скрипт, но мне не удалось адаптировать его к моей проблеме и заставить его работать.Кроме того, каждый раз, когда я запускаю этот скрипт, он выполняется очень долго и создает огромное количество файлов без названия.Я надеюсь, что вы можете помочь.

function export() { 
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheets = ss.getSheets();
  for (var i in sheets) {
    var name = sheets[i].getSheetName();
    var fo = DriveApp.getFoldersByName(name);
    var folder = fo.hasNext() ? fo.next() : 
    DriveApp.getRootFolder().createFolder(name);
    var values = sheets[i].getDataRange().getValues();
    values.shift();
    var filename, text;
    for (var j in values) {
      [filename, text] = values[j];
      folder.getFilesByName(filename).hasNext() || 
      folder.createFile(filename, text, MimeType.PLAIN_TEXT);
    }
  }
}

1 Ответ

0 голосов
/ 16 апреля 2019

Ваш код не предоставляет правильное имя файла, поэтому файлы без имен.

Используйте приведенный ниже код для установки триггера onFormSubmit для электронной таблицы, в которую записываются ответы формы.Затем он будет создавать файл при каждой отправке формы и сохранять его в папке, названной в соответствии с листом ответов.Запустите функцию setup один раз и закомментируйте ее.Тест, отправив форму.

function setup() {
  var sheet = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('myFunction')
    .forSpreadsheet(sheet)
    .onFormSubmit()
    .create();
}

// run this function one to setup formSubmit trigger
// then comment it out, like this
setup();

function myFunction(e) {
  var sheet = e.range.getSheet();
  var name = sheet.getName();

  var text = 'This file contains all the details of your purchase:\n';

  for (var key in e.namedValues) {
    text += key + ': ' + e.namedValues[key][0] + '\n';
  }

  var fo = DriveApp.getFoldersByName(name);
  var folder = fo.hasNext() ? fo.next() : DriveApp.getRootFolder().createFolder(name);

  folder.createFile(Date.now() + '', text, MimeType.PLAIN_TEXT);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...