Google apps script 无法解压缩Zip,然后使用Google Apps脚本解析CSV

Google apps script 无法解压缩Zip,然后使用Google Apps脚本解析CSV,google-apps-script,Google Apps Script,尝试创建一个Google应用程序脚本,从特定的电子邮件地址读取电子邮件,并将CSV文件的内容复制到Google工作表中 问题是,有时文件以zip附件的形式出现。我试图在脚本中使用逻辑来解压zip(如果它是zip附件),然后将数据发布到Google工作表 当前获取以下错误消息:在对象Blob中找不到函数getDataAsString 任何让它与潜在的zip文件一起工作的想法/建议都是非常好的 您可以在下面找到我的完整代码: function myFunction() { var threa

尝试创建一个Google应用程序脚本,从特定的电子邮件地址读取电子邮件,并将CSV文件的内容复制到Google工作表中

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

当前获取以下错误消息:在对象Blob中找不到函数getDataAsString

任何让它与潜在的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);
    }
}

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

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);
    }
}

谢谢你,丽兹。这很有效。非常感谢您完成的代码以及您所做更改背后的解释。