Создание JS файлов из листов Google с помощью скрипта приложения - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь создать структуру папок и javascript файлов на основе имени листа и типа (столбец a). Где начинается «Spe c», я бы хотел сгруппировать все, где начинается и заканчивается «Spe c», и вводить содержимое в этот файл, используя Google App Script.

Пример содержимого

enter image description here

Желаемый выход

enter image description here

enter image description here Пример кода

Текущий код, который я должен получить, приведен ниже. Но в настоящее время я не могу добавить средний контент в.

function export() { 
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheets = ss.getSheets();
  var filename = ""

  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 type, title, value, emptyCode, code;

    for (var j in values) {
      [type, title, value, emptyCode, code] = values[j];        
      if (type == "Spec") {
        var filename = title+'.js'
        folder.getFilesByName(filename).hasNext() || folder.createFile(filename, code, MimeType.PLAIN_TEXT)
      }
    }
  }
}

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

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

function generateStories() { 
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheets = ss.getSheets(); 
  for (var i in sheets) {    
    var sheetName = sheets[2].getSheetName();
    var fo = DriveApp.getFoldersByName(sheetName);
    var folder = fo.hasNext() ? fo.next() : DriveApp.getRootFolder().createFolder(sheetName);    
    var values = sheets[2].getDataRange().getValues();
    var type, title, code;
    loop1:
    for (var j = 0; j < values.length; j++) {
      type = values[j][0];
      if (type == "Spec") {
        var title = values[j][1];
        var filename = title+'.spec';
        var code = values[j][4] + "\n";
        loop2:
        for (i = j+1; i < values.length; i++){          
          if (values[i][0] != "Spec"){
            code += values[i][4] + "\n";
          } else {
            break loop2;
          }          
        }
        folder.getFilesByName(filename).hasNext() || folder.createFile(filename, code, MimeType.PLAIN_TEXT);
      }
    }
  }
}
0 голосов
/ 06 февраля 2020

Две вещи

  1. Значения - это двумерный массив - вам нужно обращаться к отдельным значениям, указав индексы строки и столбца, например, values[0][1] или values[i][4]

  2. Необходимо указать начало и конец содержимого каждого файла. Это можно сделать с помощью метода indexOf(), чтобы проверить, какие строки type == "Spec" заполнены, или с помощью комбинации из двух вложенных циклов for и оператора if.

Вот пример того, как реализовать функциональность с помощью вложенных циклов и комбинации операторов:

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();
    var type, title, value, emptyCode, code;
    loop1:
    for (var j = 0; j < values.length; j++) {
      type = values[j][0];
      if (type == "Spec") {
        var title = values[j][4];
        var filename = title+'.js';
        var code = "";
        loop2:
        for (i = j+1; i < values.length; i++){          
          if (values[i][0] != "Spec"){
            code += values[i][4] + "\n";
          } else {
            break loop2;
          }          
        }
        folder.getFilesByName(filename).hasNext() || folder.createFile(filename, code, MimeType.PLAIN_TEXT);
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...