- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从位于共享电子邮件的特定文件夹中的 CSV 报告中获取数据,并将 Google 表格中特定标签中的旧数据替换为新数据。
我已经尝试过不同的解决方案,但似乎没有一个能让我到达我想要的位置。下面的代码是我生成的最干净的代码,但由于某种原因,它什么也没做。
我遵循的步骤:
这是一份Google表格,看格式:https://docs.google.com/spreadsheets/d/1GyGxSwUtITeje0-Qx63rB8xChMSbLvn1FDCOKOJITio/edit?usp=sharing
我已经尝试过这段代码:
function importCSVFromGmail() {
var threads = GmailApp.search("id:AH1rexR2yzlanbk9GyP52tyVKSnXcMDz_miTs1-lLXtJwJB56l2r label:rpt-its-all-data");
var message = threads[0].getMessages()[0];
var attachment = message.getAttachments()[0];
// Is the attachment a CSV file
if (attachment.getContentType() === "text/csv") {
var id = "1F_Z_00-ThdTRzlZ3nYd_pieJHkUjgye3pI_KJfydoP4";
var name = "ALLDATA";
var sheet = SpreadsheetApp.openById(id);
var tab = sheet.getSheetByName(name);
// Clear the content of the sheet
tab.clearContents().clearFormats();
tab.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
var csvData = tab.Utilities.parseCsv(attachment.getDataAsString(), ",");
}
}
使用上面的代码,我没有得到任何结果。我不确定为什么会这样。
我认为查询中的邮件 ID 不正确,无法调用该电子邮件,但我找不到任何其他方法。
最佳答案
我用这些更改修改了您的代码,因此它可以按预期工作:
1) 您遇到了错误,因为必须先声明 csvData 变量,然后才能使用它。此外,parseCsv() 函数来自 Utilities 类,您可以直接使用此类(您这样调用它:tab.Utilities.parseCsv)[1]。另一个问题是您无法使用消息 ID [2] 搜索消息,为此您应该发出获取请求 [3]。
2) 我放了一个 If 来验证邮件是否有附件。
3) 我更改了 If 中的条件以验证它是否是文件名中带有文件扩展名的 csv 文件,因为 gmail API 将带有“application/octet-stream”的 csv 文件作为 mime 类型(我猜这是因为您可以在 gmail 中将其作为 Google 表格打开。
4) 我修改了您获取消息的方式以获取最后一个线程的最后一条消息,之前它是获取每个线程的第一条消息而不是最后一个。
5) 在INFO sheet中设置日期,如果需要特定格式可以勾选formatDate函数[1]。
function importCSVFromGmail() {
var threads = GmailApp.search("label:rpt-its-all-data");
var message = threads[0].getMessages().pop();
var attachment = message.getAttachments()[0];
if (attachment != null) {
var attachName = attachment.getName();
// Is the attachment a CSV file
if (attachName.substring(attachName.length-4) === ".csv") {
var id = "1bvENjFYC48LSYDMPtI4FIOKIChiuIrg5O4WRziFeAhU";
var name = "ALLDATA";
var sheet = SpreadsheetApp.openById(id);
var tab = sheet.getSheetByName(name);
var tabInfo = sheet.getSheetByName("INFO");
tabInfo.getRange("B1").setValue(new Date());
// Clear the content of the sheet
tab.clearContents().clearFormats();
var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");
tab.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
}
}
[2] https://support.google.com/mail/answer/7190
[3] https://developers.google.com/gmail/api/v1/reference/users/messages/get
关于csv - 如何将数据从 Gmail 邮件附件复制到电子表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57221421/
我是一名优秀的程序员,十分优秀!