将CSV附件导入google工作表

将CSV附件导入google工作表,csv,google-apps-script,google-sheets,Csv,Google Apps Script,Google Sheets,我想做的是,将CSV附件的内容输出到Google表单上。不知道我做的是否正确,但我在网上找到了这个,运行了它,然后什么也没发生 function importCSVFromGmail() { var threads = GmailApp.search("from:cbuffone123@gmail.com"); var message = threads[0].getMessages()[0]; var attachment = message.getAttachment

我想做的是,将CSV附件的内容输出到Google表单上。不知道我做的是否正确,但我在网上找到了这个,运行了它,然后什么也没发生

function importCSVFromGmail() {
    var threads = GmailApp.search("from:cbuffone123@gmail.com");
    var message = threads[0].getMessages()[0];
    var attachment = message.getAttachments()[0];

    // Is the attachment a CSV file
    if (attachment.getContentType() === "text/csv") {
        var sheet = SpreadsheetApp.getActiveSheet();
        var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");

        // Remember to clear the content of the sheet before importing new data
        sheet.clearContents().clearFormats();
        sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
    }
}

在我的环境中,我确认当从电子邮件中检索附加的
*.csv
文件时,mimeType被检索为
application/vnd.ms excel
。我认为“什么都没发生”的原因是这样的。那么这些修改呢?我认为对于你的情况有几个变通办法。因此,请将这些修改视为其中的3个

修改点:
  • 模式1:从文件名设置mimeType
  • 模式2:使用mimeType作为
    application/vnd.ms excel
  • 模式3:使用扩展名
模式1: 如果(attachment.getContentType()=“text/csv”){,请在
之前添加以下脚本

attachment.setContentTypeFromExtension();
模式2: 请修改如下

发件人: 致: 模式3: 请修改如下

发件人: 致: 注:
  • 关于模式1,mimeType是通过使用
    setContentTypeFromExtension()
    从文件名的扩展名设置的
  • 关于模式2,如果在您的环境中,CSV文件作为其他mimeType检索,请修改
    application/vnd.ms excel
  • 关于模式1和3,如果CSV文件的文件名没有扩展名或其他扩展名,则在这种情况下无法使用
参考:

如果这些不是你想要的,我很抱歉。

嘿,非常感谢!看起来模式1似乎有效。我没有检查其他模式,因此不确定它们是否也有效。就功能而言,如果此专用电子邮件每天接收CSV文件,并且脚本每天运行,那么发送到google工作表的内容是什么?是最新的电子邮件附件吗?是否合并了它们?谢谢!@Carlo B.谢谢你的回复。我很高兴你的问题得到了解决。关于你的另一个问题,
threads[0]
getMessages()[0]
表示最新线程和最新线程中的最新消息来自:cbuffone123@gmail.com
getAttachments()[0]
表示附件文件的第一个文件。如果最新邮件中只包含一个CSV文件,
getAttachments()[0]
是CSV文件。关于合并,如果要将CSV数据合并到电子表格,请删除
clearContents()
和modify
range
。我对你的回答的理解正确吗?@Carlo B.欢迎。谢谢你让我知道。如果你的问题解决了,请按下接受按钮。与你有相同问题的其他人也可以将你的问题作为可以解决的问题。如果你没有找到按钮,请随时告诉我e、 @Carlo B.感谢您的回复。这非常有效。是否有可能让此应用程序脚本仅按名称加载特定的文件附件?目标是将两个不同的文件名发送到此帐户;应用程序脚本a将提取第一个磁贴,应用程序脚本B提取第二个文件?
if (attachment.getContentType() === "text/csv") {
if (attachment.getContentType() === "application/vnd.ms-excel") {
if (attachment.getContentType() === "text/csv") {
var fileName = attachment.getName().toUpperCase().split(".");
if (fileName.length > 1 && fileName[1] == "CSV") {