将所有电子表格压缩为CSV并作为电子邮件发送

时间:2013-11-28 14:05:10

标签: google-apps-script google-sheets google-docs google-docs-api

我正在使用Google表格为我正在制作的程序创建数据。我所做的是使用Google表格构建数据,然后以CSV格式下载,并将其复制到应用程序文件夹。

问题是,现在我的数据中有很多张(标签)并逐个下载它们有点麻烦。

所以我认为我会使用Google Apps脚本来创建一个功能,将它们全部转换为CSV,压缩它们,并将它们作为下载文件发送到客户端。

这可行吗?任何人对如何有任何建议?

1 个答案:

答案 0 :(得分:4)

  1. 将工作表转换为CSV

    请参阅 教程:与您的文档列表进行交互 中的Saving a selected Range to a CSV file

    如果您为此创建临时文件夹,然后在该文件夹中生成CSV文件,您将简化以后的zip和清理操作。

  2. 从驱动器中压缩多个文件

    Utilities.zip(blobs, name)。如果所有的zip文件都在一个临时文件夹中,那么你应该可以这样做:

    function zipSheets() {
      var name = 'All CSV Files.zip';
      var folderName = 'Temp CSV Files';
    
      var folder = DriveApp.getFoldersByName(folderName).next();
      var csvFilesIterator = folder.getFiles();
      var csvFiles = [];
    
      while (csvFilesIterator.hasNext()) {
        csvFiles.push(csvFilesIterator.next().getBlob());
      }
    
      // Create zip file on google drive
      var zipBlob = Utilities.zip(csvFiles, name);
      var zipFile = DriveApp.createFile(zipBlob);
      // NOTE: sharing permissions not set
    
      // get URL of zip file, and display to user.
      // ASSUMES you've launched this from a spreadsheet menu
      var url = DriveApp.getFilesByName(name).next().getUrl();
    
      var htmlApp = HtmlService
         .createHtmlOutput('<p>Zip file URL: '+url+'</p>')
         .setTitle('Zip file created')
         .setWidth(800)
         .setHeight(70);
    
      SpreadsheetApp.getActiveSpreadsheet().show(htmlApp);
    
    }
    
  3. 向客户端发送新创建的zip文件的下载URL。

    请参阅File.getUrl(),使用它来获取zip文件的URL。 (上面的示例演示了此功能。)将其嵌入电子邮件中,以便客户端可以单击它。点击后,他们将从谷歌驱动器访问zip文件,因此您还应确保正确设置共享。

    或者,您可以将zip文件附加到电子邮件中,从而避免与云端硬盘共享。

  4. 清理临时CSV文件&amp;文件夹。

    如果您选择通过电子邮件将zip文件作为附件发送,您也可以删除临时zip文件。