从 gmail 线程中的 ZIP 文件中提取 CSV 并将数据写入 google 工作表
Extract CSV from ZIP file in gmail thread and write data to a google sheets
我正在编写一个执行以下操作的脚本。
在 gmail "test" 中查找特定标签。
找到第一条消息并获取附件(这是一个 ZIP,包含一个 CSV)
提取 CSV 并将其写入 google 电子表格。
我已经设法用 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 附件导入 google 工作表而制作的脚本,这个有效。
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);
}
找到我哪里出错了。
这是代码的 toString
部分。我没有告诉它是哪个条目
这部分;
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);
}
我正在编写一个执行以下操作的脚本。 在 gmail "test" 中查找特定标签。 找到第一条消息并获取附件(这是一个 ZIP,包含一个 CSV) 提取 CSV 并将其写入 google 电子表格。
我已经设法用 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 附件导入 google 工作表而制作的脚本,这个有效。
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);
}
找到我哪里出错了。
这是代码的 toString
部分。我没有告诉它是哪个条目
这部分;
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);
}