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

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

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

问题是,现在我的数据中有相当多的工作表(选项卡),一张一张地下载它们有点麻烦。

因此,我想使用 Google Apps 脚本创建一个函数,将它们全部转换为 CSV、压缩它们,然后将它们作为下载发送给客户端。

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

最佳答案

  1. 将工作表转换为 CSV

    参见Saving a selected Range to a CSV file来自教程:与文档列表交互

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

  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。 (上面的示例演示了此功能。)将其嵌入电子邮件中,以便客户可以单击它。单击后,他们将从 Google 云端硬盘访问 zip 文件,因此您还应该确保共享设置正确。

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

  4. 清理临时 CSV 文件和文件夹。

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

关于google-apps-script - 将所有电子表格压缩为 CSV 并作为电子邮件发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20268191/

相关文章:

google-apps-script - CalendarEvent 中的 SetTag() 导致 "Action not allowed"错误

google-apps-script - 错误消息 : "Cannot connect to Gmail"

google-apps-script - 是否可以从谷歌电子表格填充谷歌表单?

jquery - 如何确定 Google 表格窗口大小

pdf - 如何在 Google 的文档查看器上打开特定页面

javascript - 删除电子表格中今天日期应用程序脚本之前的日期

javascript - JS 数组 - 检查对象值是否重复

google-apps-script - 在应用程序脚本中将 .XLS 转换为 Google 表格的最有效方法是什么?

javascript - 这个结论正确吗?我的推理是否有错误

javascript - 通过 Google Apps 脚本对 Google 文档中的字符串进行文本格式设置