Сохранить электронную таблицу как CSV-файл в данной папке - PullRequest
2 голосов
/ 25 октября 2019

Мне нужно, чтобы электронная таблица из моей корневой папки была сохранена в виде csv-файла в определенной папке.

С помощью участников мне удалось объединить несколько файлов CSV в один лист и удалитьто же самое содержимое из нескольких строк, теперь я хочу сохранить этот лист из моей корневой папки как файл CSV в моей заданной папке.


  /* Retrieve the desired folder */
  var myFolder = DriveApp.getFolderById('1niUw2-');

  /* Get all spreadsheets that resided on that folder */
  var spreadSheets = myFolder.getFilesByType(MimeType.CSV);

  /* Create the new spreadsheet that you store other sheets */  
  var newSpreadSheet = SpreadsheetApp.create("Merge Sheets");

  /* Iterate over the spreadsheets over the folder */
  while(spreadSheets.hasNext()) {

    var sheet = spreadSheets.next();


    var file = DriveApp.getFileById(sheet.getId());
    var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
    var newSheet = newSpreadSheet.getActiveSheet();
for (var i=0;i<csvData.length;i++) {
        newSheet.appendRow(csvData[i]);
      }
     var data = newSheet.getDataRange();
  var values = data.getValues();
 for (var i=values.length -1; i >=1; i--){
    if (values[i][0] == "Titel"){
   newSheet.deleteRow(i+1);
      }
 }
myFolder.createFile('MERGED',newSheet,MimeType.CSV);
  } }

Мне нужен этот отредактированный файл электронной таблицы "Объединенный лист" из моей корневой папкив мою папку как файл CSV.

1 Ответ

2 голосов
/ 25 октября 2019
  • Вы хотите объединить файлы CSV в один файл CSV.
    • Файлы CSV находятся в определенной папке.
  • Вы хотите создать объединенный файл CSV в определенной папке.
  • Когда данные CSVобъединен, вы хотите удалить строки, которые имеют Titel в столбце «A».
  • Вы хотите добиться этого с помощью скрипта Google Apps.

Если я понимаюправильно, как насчет этой модификации? Пожалуйста, подумайте об этом как об одном из нескольких ответов.

В вашем скрипте все данные CSV помещаются в новую электронную таблицу с использованием appendRow(), а затем, когда значение столбца "A" равно Titel, строка удалена. В этом случае я думал, что стоимость процесса может стать высокой. Так как насчет следующего потока?

Поток:

  1. Извлечение каждого CSV-файла из определенной папки.
  2. Анализ файла как данных CSV.
  3. Из данных CSV удалите строки с Titel в столбце «A».
  4. Поместите данные CSV в массив.
  5. После обработки всех файлов CSV извыше 2-4 массив, включающий данные CSV, экспортируется как файл CSV в определенную папку.

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

Модифицированный скрипт:

function myFunction() {
  var myFolder = DriveApp.getFolderById('###'); // Please set the folder ID including the CSV files.

  var csvFiles = myFolder.getFilesByType(MimeType.CSV);
  var data = [];
  while (csvFiles.hasNext()) {
    var csvFile = csvFiles.next();
    var file = DriveApp.getFileById(csvFile.getId());
    var csvData = Utilities.parseCsv(file.getBlob().getDataAsString()).filter(function(row) {return row[0] != "Titel"});
    Array.prototype.push.apply(data, csvData);
  }
  myFolder.createFile('MERGED', data.map(function(row) {return row.join(",")}).join("\n"), MimeType.CSV);
}

Примечание:

  • Если вы хотите создать объединенные данные CSV в виде электронной таблицы, поместите следующий скрипт в последнюю строкуфункция myFunction.

    SpreadsheetApp.create("Merge Sheets").getSheets()[0].getRange(1, 1, data.length, data[0].length).setValues(data);
    

Ссылки:

Если я неправильно понял ваш вопрос, и это не то направление, которое вам нужно, прошу прощенияe.

Edit:

Pattern 1:

Если вы хотите удалить 1-ую строку каждого CSV-данных, как насчет следующей модификации? Пожалуйста, измените мой выше модифицированный скрипт следующим образом.

С:
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString()).filter(function(row) {return row[0] != "Titel"});
Кому:
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
csvData.shift();

или

var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
if (data.length > 0) csvData.shift();
  • Ниже модифицированный скрипт оставляет только 1-ю строку в 1-ом CSVфайл.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...