簡體   English   中英

如何將 append CSV 附件附加到現有的 Google 表格

[英]How to append CSV attachments to existing Google Sheet

我目前有一個名為 importCSVFromGmail 的 function:

function importCSVFromGmail() {
var threads = GmailApp.search("from:noreply@exacttarget.com");
var message = threads[0].getMessages()[0];
var attachment = message.getAttachments()[0];

// Is the attachment a CSV file
attachment.setContentTypeFromExtension();
if (attachment.getContentType() === "text/csv") {
    var sheet = SpreadsheetApp.getActiveSheet();
    var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");

    // Remember to clear the content of the sheet before importing new data
    sheet.clearContents().clearFormats();
    sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
}

此導入有效,但它僅從指定的 email 地址獲取最新附件,並使用該地址填充 Google 表格,從而在此過程中刪除前幾天的導入。

我想知道是否可以更改腳本以導入from:noreply@exacttarget.com收到的所有報告,並將它們全部顯示在同一張表中。

請注意,第一行包含 header 行名稱,並且不是每個 CSV 文件都需要的。

任何幫助或提示將不勝感激!

您想要 append csv 數據而不是替換現有數據。

刪除這些行
您的代碼包括需要刪除的這些行:

  1. sheet.clearContents().clearFormats();

此行從工作表中刪除所有現有數據。

  1. sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);

這定義了一個左上角有單元格“A1”的區域,行數和列數由 CSV 數據定義。 通過使用單元格 A1,數據將位於工作表的頂部。

用。。。來代替:

var LR = sheet.getLastRow();
sheet.getRange(LR+1, 1, csvData.length, csvData[0].length).setValues(csvData);

LR 在工作表的最后一行定義。
那么范圍的第一行是“LR+1” - 緊隨最后一行之后的行。
因此setValues方法將 append 數據到工作表,從“最后一行”之后的第一行開始。


編輯:按時間戳排序

顯然,您需要獲取新的“最后一行”,而我也得到了最后一列(但這可以從較早的值中重新使用)。 這允許建立一個范圍getRange() - 然后排序( sort )(請注意,范圍從第 2 行開始以避免標題)。

FWIW,1) sort可以鏈接到getRange (剪掉兩行)。 我沒有這樣做,只是為了演示/證明范圍尺寸。 2) 有一個用於工作表和范圍的排序命令 - 最好不要混淆它們;-)

  var sortLR = sheet.getLastRow();
  var sortLC = sheet.getLastColumn();
  var sortrange = sheet.getRange(2,1,sortLR-1,sortLC);
  // Logger.log("DEBUG: the sort range = "+sortrange.getA1Notation());
  sortrange.sort([{column: 1, ascending: false}]);

參考

范圍sort

暫無
暫無

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

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