gpt4 book ai didi

csv - 如何将数据从 Gmail 邮件附件复制到电子表格?

转载 作者:行者123 更新时间:2023-12-04 15:42:42 27 4
gpt4 key购买 nike

我正在尝试从位于共享电子邮件的特定文件夹中的 CSV 报告中获取数据,并将 Google 表格中特定标签中的旧数据替换为新数据。

我已经尝试过不同的解决方案,但似乎没有一个能让我到达我想要的位置。下面的代码是我生成的最干净的代码,但由于某种原因,它什么也没做。

我遵循的步骤:

  1. 打开文件夹所在的邮箱(共享邮箱,在Gmail中管理)
  2. 搜索所在文件夹(label:rpt-its-all-data)
  3. 取最后收到的邮件
  4. 打开电子邮件/附件
  5. 获取数据
  6. 按 ID 打开 Google 表格
  7. 用当前日期更新选项卡 INFO 中单元格 B1 中的日期(我什至没有尝试将其整理出来)
  8. 打开“所有数据”标签
  9. 在标签 ALLDATA 中粘贴值

这是一份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);
}
}
}

[1] https://developers.google.com/apps-script/reference/utilities/utilities#formatDate(Date,String,String)

[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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com