簡體   English   中英

將電子表格另存為給定文件夾中的 csv 文件

[英]Save spreadsheet as a csv file in given folder

我需要將根文件夾中的電子表格保存為特定給定文件夾中的 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);
  } }

我需要這個編輯過的電子表格文件“Merged sheet”從我的根文件夾到我給定的文件夾中作為 csv 文件。

  • 您希望將 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的 function 的最后一行。

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

參考:

如果我誤解了您的問題並且這不是您想要的方向,我深表歉意。

編輯:

模式一:

如果要刪除每個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 文件中留下第一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM