【问题标题】:Import CSV attachment into google sheets将 CSV 附件导入谷歌表格
【发布时间】:2018-09-24 17:04:45
【问题描述】:

我想要做的是获取 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 google-apps-script google-sheets


    【解决方案1】:

    在我的环境中,我确认从电子邮件中检索附加的*.csv 文件时,mimeType 检索为application/vnd.ms-excel。我认为“什么都没有发生”的原因是这样的。那么这些修改呢?我认为您的情况有几种解决方法。所以请将这些修改视为其中的 3 个。

    修改点:

    • 模式 1:根据文件名设置 mimeType。
    • 模式 2:使用 mimeType 作为application/vnd.ms-excel
    • 模式 3:使用扩展。

    模式一:

    请在if (attachment.getContentType() === "text/csv") {前添加以下脚本。

    attachment.setContentTypeFromExtension();
    

    模式2:

    请进行如下修改。

    从:
    if (attachment.getContentType() === "text/csv") {
    
    到:
    if (attachment.getContentType() === "application/vnd.ms-excel") {
    

    模式3:

    请进行如下修改。

    从:
    if (attachment.getContentType() === "text/csv") {
    
    到:
    var fileName = attachment.getName().toUpperCase().split(".");
    if (fileName.length > 1 && fileName[1] == "CSV") {
    

    注意:

    • 关于模式 1,mimeType 是使用 setContentTypeFromExtension() 从文件名的扩展名中设置的。
    • 关于模式2,如果在您的环境中,CSV文件被检索为其他mimeType,请修改application/vnd.ms-excel
    • 关于模式1和3,如果CSV文件的文件名没有扩展名或其他扩展名,则不能在这种情况下使用。

    参考:

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

    【讨论】:

    • 嘿,非常感谢!看起来模式 1 似乎有效。我没有检查其他人,所以不确定他们是否也有效。在功能方面,如果这个专门的电子邮件每天接收 CSV 文件,并且脚本每天运行,那么发送到谷歌表的内容是什么?它是最新的电子邮件附件吗?它合并它们吗?谢谢!
    • @Carlo B. 感谢您的回复。我很高兴你的问题得到了解决。关于您的另一个问题,threads[0]getMessages()[0] 表示来自from:cbuffone123@gmail.com 的最新线程中的最新线程和最新消息。 getAttachments()[0] 表示附件文件的第一个文件。如果最新邮件中只包含一个 CSV 文件,则getAttachments()[0] 是 CSV 文件。关于合并,如果要合并CSV数据到Spreadsheet,请去掉clearContents(),修改range。我对您的回复的理解正确吗?
    • @Carlo B. 欢迎。谢谢你让我知道。如果您的问题得到解决,请按接受按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果找不到按钮,请随时告诉我。 stackoverflow.com/help/accepted-answer
    • @Carlo B. 感谢您的回复。
    • 这很好用。是否可以让此应用程序脚本仅按名称加载特定文件附件?目标是向该帐户发送 2 个不同的文件名;应用脚本 A 会拉出第一个图块,应用脚本 B 会拉出第二个文件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多