Как сохранить содержимое 50 строк в Google Sheets в формате txt.файл с помощью скрипта Google Apps - PullRequest
2 голосов
/ 20 июня 2019

Я смотрю на таблицу с 2000-10000 строк и мне нужно сохранить содержимое 50 строк в текстовом файле, каждая строка в текстовом формате.файл должен быть 1 ряд.Кроме того, разделитель должен быть "|".


Таблица дана:

A1  T   B1  C1  ...

A2  T   B2  C2  ...

сохранено в txt. файле, например:

A1|T|B1|C1|...

A2|T|B2|C2|...

Как выполнить циклчерез таблицу, чтобы создать для 50 строк новый файл, содержащий содержимое?

function getTxtFiles(){

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var sheet = ss.getSheetByName("Test");

    var folderName = 'Test Folder';
    var folderID = 'Test Folder ID';
    var documentName = 'Test_1.txt'
    var folder = DriveApp.getFolderById(folderID);

  var data = sheet.getDataRange();
  var values = data.getValues();
  var rows = "";   

for (var a = 0; a < data[a].length; a++) {
  for (var i = 0; i < values[i].length; i++) {
    for (var j = 0; j < values[i].length; j++) {
      if (values[i][j]) {
        rows = rows + values[i][j];
          }
    rows = rows + "|";
        }
      }
    }

    var sss = DriveApp.createFile(documentName,rows,MimeType.PLAIN_TEXT);
    var file = DriveApp.getFileById(sss.getId());
    var parents = file.getParents();
    parents.next().removeFile(file);
    folder.addFile(file); 

}

Я хотел бы добиться, чтобы скрипт создавался из таблицы с 2,000 rows and with 40 columns, 40 x txt.файлы и каждый файл включает в себя содержимое 50 строк, каждая строка как 1 строка в текстовом формате.файл.

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

Попробуйте следующий код:

function txtFileCreator(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues(); // will give you all data cells in a 2D array
  var text = "";
  var count = 0;
  var flag = false;

  for (var i = 0; i < data.length; i++){
    flag = true;    
    for (var j = 0; j < data[0].length; j++)
      text += data[i][j] + " | ";

    text += "\n";

    if ((i+1) % 50 == 0){
      count++;
      createF(text, count);
      text = "";
      flag = false;
    }
  }

  if (flag)
    createF(text, ++count);
}

function createF(content, count){
  DriveApp.createFile("File " + count, content, MimeType.PLAIN_TEXT);
}

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

0 голосов
/ 20 июня 2019

Поток:

  • values - это двумерный массив.Соедините внутренний массив, используя |, а внешний массив - с помощью \n
  • . Используйте str.match(regex), чтобы получить массив из 50 строк в каждой
  • Создать файл для каждой строки в массиве.

Фрагмент:

var folder = DriveApp.getFolderById('[OUTPUT_FOLDER_ID]')
values.map(function(row){return row.join('|')})
  .join('\n')
  .match(/((?:.*\n){50}|(?:[\s\S]+$))/g)
  .forEach(function(str,i){ folder.createFile('textFile'+ i, str})

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...