在gmail线程中从ZIP文件中提取CSV,并将数据写入谷歌表单

Extract CSV from ZIP file in gmail thread and write data to a google sheets

本文关键字:数据 表单 谷歌 CSV 线程 gmail ZIP 提取 文件      更新时间:2023-09-26

我正在编写一个执行以下操作的脚本。在gmail中查找特定标签"test"。找到第一条消息并获取附件(这是一个ZIP,包含一个CSV)提取CSV并将其写入谷歌电子表格。

我已经用CSV附件做到了这一点,但没有用里面有CSV的zip。

这就是我目前的处境。我确信我缺少的是一些简单的东西,但它似乎是从ZIP中读取并编写奇怪的字符,而不是从里面的CSV中读取。

    function getCSV() {
 var myLabel = GmailApp.getUserLabelByName("test");
 var threads = myLabel.getThreads(0,1);
 var msgs = GmailApp.getMessagesForThreads(threads);
 var attachments = msgs[0][0].getAttachments();
 Logger.log(attachments);
var csv =  attachments[0];
Logger.log(csv);
 var extracted = Utilities.unzip(csv);
 Logger.log("unzipped data "+ extracted);
 var toString = extracted.getBlob.getDataAsString();
 Logger.log(toString);
 var data = Utilities.parseCsv(toString);
 Logger.log(data);

//var ss = SpreadsheetApp.getActiveSpreadsheet();
//var sheet = ss.getSheetByName("TicketDump");
//sheet.clearContents();
//var range = sheet.getRange(1,1, data.length,data[0].length);
//range.setValues(data);
// 
}

如果它能揭示我的问题,这里是我制作的将CSV附件导入谷歌表单的脚本,这很有效。

function getCSV() {

 var myLabel = GmailApp.getUserLabelByName("test");
 var threads = myLabel.getThreads(0,1);
 var msgs = GmailApp.getMessagesForThreads(threads);
 var attachments = msgs[0][0].getAttachments();
 var csv =  attachments[0].getDataAsString();
 var data = Utilities.parseCsv(csv);

var a = data.length ;
var b = data[0].length; 

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("TicketDump");
var super = sheet.getRange("E1").getFormula();
var ticketLink = sheet.getRange("F2:F").getFormulas();
sheet.clearContents();
var range = sheet.getRange(sheet.getLastRow()+1,5, a, b);
var range = sheet.getRange(1,1, a, b);
range.setValues(data);
sheet.getRange("E1").setFormula(super);
sheet.getRange("F1").setValue("Header name");
sheet.getRange("F2:F").setFormulas(ticketLink);

}

找到了我出错的地方。

它是代码的CCD_ 1部分。我没有告诉它的哪个条目

本部分;

var toString = extracted.getBlob.getDataAsString();

应该是类似的东西

var toString = extracted[0].getDataAsString();

最终代码看起来像这个

    function getCSV() {
 var myLabel = GmailApp.getUserLabelByName("test");
 var threads = myLabel.getThreads(0,1);
 var msgs = GmailApp.getMessagesForThreads(threads);
 var attachments = msgs[0][0].getAttachments();

var csv =  attachments[0];
var extracted = Utilities.unzip(csv);
var string = extracted[0].getDataAsString();
var data = Utilities.parseCsv(string);


var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("TicketDump");
sheet.clearContents();
var range = sheet.getRange(1,1, data.length,data[0].length);
range.setValues(data);

}