将电子表格另存为给定文件夹中的csv文件

时间:2019-10-25 10:46:09

标签: google-apps-script google-sheets

我需要从我的根文件夹中将电子表格保存为特定给定文件夹中的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 个答案:

答案 0 :(得分:2)

  • 您要将CSV文件合并到一个CSV文件中。
    • CSV文件位于特定的文件夹中。
  • 您要在特定文件夹中创建合并的CSV文件。
  • 合并CSV数据后,您要删除“ A”列中有Titel的行。
  • 您想使用Google Apps脚本实现这一目标。

如果我的理解是正确的,那么该修改如何?请认为这只是几个答案之一。

在脚本中,使用appendRow()将每个CSV数据放入新的电子表格,然后,当列“ A”的值为Titel时,将删除该行。在这种情况下,我认为处理成本可能会很高。那么下面的流程呢?

流量:

  1. 从特定文件夹中检索每个CSV文件。
  2. 将文件解析为CSV数据。
  3. 从CSV数据中,删除“ A”列中具有Titel的行。
  4. 将CSV数据放入数组。
  5. 从2到4处理完所有CSV文件后,包含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);
    

参考文献:

如果我误解了您的问题,而这不是您想要的方向,我深表歉意。

编辑:

模式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();
  • 以下修改后的脚本仅将第一行保留在第一个CSV文件中。