在gmail线程中从ZIP文件中提取CSV,并将数据写入谷歌表单
Extract CSV from ZIP file in gmail thread and write data to a google sheets
我正在编写一个执行以下操作的脚本。在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);
}
相关文章:
- 如何从pdftron webviewer获取表单数据
- JS验证ajax返回的html中的表单数据
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 将单击事件添加到数据表
- 预览数据表单
- Ajax数据表单序列化防止双重提交
- 如何在 Spring Framework 中处理表数据表单提交
- 发布大型数据表单 Angular JS
- 覆盖Magento中的默认数据表单提交JS活动
- 保存不带按钮的数据表单
- 更新Highchart数据表单导出按钮
- 将数据表单转换为PDF
- 我的Angular视图没有用数据表单服务器更新
- 如何在不重新加载页面的情况下获取数据表单数据库
- JavaScript SDK返回数据表单嵌套函数
- 使用php AJAX发送数据表单请求失败
- 数据表单$scope在Angular的view (page)中不显示
- 实时交换 HTML 数据表单
- 搜索parse.com数据表单html输入
- 如何在MVC中返回JSON数据表单控制器到jsp