[英]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 數據而不是替換現有數據。
刪除這些行
您的代碼包括需要刪除的這些行:
sheet.clearContents().clearFormats();
此行從工作表中刪除所有現有數據。
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.