【问题标题】:Trouble Uncompressing Zip and then parsing CSV with Google Apps Script无法解压缩 Zip,然后使用 Google Apps 脚本解析 CSV
【发布时间】:2018-04-29 01:12:14
【问题描述】:

尝试创建一个 Google Apps 脚本来读取来自特定电子邮件地址的电子邮件并将 CSV 文件的内容复制到 Google 工作表中。

问题是有时文件以 zip 附件的形式出现。我正在尝试在脚本中加入逻辑以解压缩 zip(如果它是 zip 附件),然后将数据发布到 Google 工作表。

当前收到以下错误消息:Cannot find function getDataAsString in object Blob。

任何关于让它与潜在的 zip 文件一起工作的想法/建议都会很棒。

你可以在下面找到我的完整代码:

function myFunction() {
    var threads = GmailApp.search("from:testemail@example.com");
    var message = threads[0].getMessages()[0];
    var attachment = message.getAttachments()[0];
    Logger.log(attachment.getContentType());
    // Is the attachment a CSV file
    if (attachment.getContentType() === "text/csv") {
        var sheet = SpreadsheetApp.getActiveSheet();
        var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");
      Logger.log("Found a CSV file");
        // 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);
    }
    if (attachment.getContentType() === "application/zip") {
        var sheet = SpreadsheetApp.getActiveSheet();
        var files = Utilities.unzip(attachment);
      Logger.log(files);
        var newDriveFile = DriveApp.createFile(files[0]);
        var csvData = Utilities.parseCsv(files.getDataAsString(), ",");
        Logger.log("Found a ZIP file");
        // 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);
    }
}

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    Utilities.unzip 将返回 blob 数组。因此,您需要在 blob 数组中引用特定的 blob。只需修改下面的代码sn-p即可。

    var files = Utilities.unzip(attachment)[0];
    

    此外,提及字符集是安全的,以便正确显示特殊字符。

    var csvData = Utilities.parseCsv(attachment.getDataAsString('ISO-8859-1'), ",");
    

    整个功能:

    function exportData() {
        var threads = GmailApp.search("from:testemail@example.com");
        var message = threads[0].getMessages()[0];
        var attachment = message.getAttachments()[0];
        Logger.log(attachment.getContentType());
        // Is the attachment a CSV file
        if (attachment.getContentType() === "text/csv") {
            var sheet = SpreadsheetApp.getActiveSheet();
            var csvData = Utilities.parseCsv(attachment.getDataAsString('ISO-8859-1'), ",");
          Logger.log("Found a CSV file");
            // 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);
        }
        if (attachment.getContentType() === "application/zip") {
            var sheet = SpreadsheetApp.getActiveSheet();
            var files = Utilities.unzip(attachment)[0];
            var csvData = Utilities.parseCsv(files.getDataAsString('ISO-8859-1'), ",");
            Logger.log("Found a ZIP file");
            // 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);
        }
    }
    

    【讨论】:

    • 谢谢丽兹。这非常有效。非常感谢您完成的代码以及您所做更改背后的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多