google-apps-script - 在事件发生时将 "automatically"电子表格作为 .xlsx 下载到本地计算机

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

请参阅下面将事件 Google 电子表格转换为 .xlsx 文件的函数。该脚本将文件保存在 Google Drive 中。

function downloadAsXlsx() {

var spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); 
var ssID = spreadSheet.getId();

Logger.log(ssID);

var url = "https://docs.google.com/spreadsheets/d/"+ssID+"/export?format=xlsx";   
var params = {method:"GET", headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
var response = UrlFetchApp.fetch(url, params);

// save to drive
DriveApp.createFile(response);

}

如果您将上述 URL 中的 ssID 替换为事件 Google 电子表格的实际文件 ID,并将 URL 复制并粘贴到浏览器中,则事件电子表格将“自动”下载。这正是我需要添加到上述脚本中的内容。

我的问题是如何更改和/或扩展上述功能,以便将文件下载到默认下载文件夹中的本地计算机?

最佳答案

正如您所注意到的,您在问题中发布的代码将 Google 电子表格的 XLS 版本导出到 Google 云端硬盘。如果您要将 Google 云端硬盘同步到您的 PC,那么您最终也会在您的 PC 上获得一份副本……但这不是您想要的。您想要一种触发 Google 表格 HTTP 下载的方法,该方法使用系统对话框让您选择 PC 上保存下载文件的位置。

为此,我们不能使用服务器端 Google Apps 脚本技术,因为服务器无法访问您机器的资源。相反,我们需要利用浏览器。由于您有兴趣从“事件电子表格”执行此操作,因此使用自定义菜单项扩展 Google 电子表格的 UI 以提供包含下载链接的对话框是合乎逻辑的。

screenshot

支持这一点只需要很少的代码。这项工作由您的浏览器根据包含 <a> 的单行 HTML 完成。 ( anchor ) 标签。

/**
 * Adds a custom menu
 *
 * @param {Object} e The event parameter for a simple onOpen trigger.
 */
function onOpen(e) {
  SpreadsheetApp.getUi()
      .createMenu('Custom')
      .addItem('Download as XLSX', 'downloadXLS_GUI')
      .addToUi();
}


/**
 * Display a modal dialog with a single download link.
 *
 * From: http://stackoverflow.com/a/37336778/1677912
 */
function downloadXLS_GUI() {
  // Get current spreadsheet's ID, place in download URL
  var ssID = SpreadsheetApp.getActive().getId();
  var URL = 'https://docs.google.com/spreadsheets/d/'+ssID+'/export?format=xlsx';

  // Display a modal dialog box with download link.
  var htmlOutput = HtmlService
                  .createHtmlOutput('<a href="'+URL+'">Click to download</a>')
                  .setSandboxMode(HtmlService.SandboxMode.IFRAME)
                  .setWidth(80)
                  .setHeight(60);
  SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Download XLS');
}

关于google-apps-script - 在事件发生时将 "automatically"电子表格作为 .xlsx 下载到本地计算机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37212135/

相关文章:

asynchronous - 如何使用 Google Apps Script webapp 发送延迟响应(Slack api)?

c# - 错误 : 'fields' parameter is required for this method

google-apps-script - 如何根据数据集动态调整 Google Sheets 图表的垂直 (y) 轴最小值和最大值?

javascript - Google 电子表格的自定义函数始终返回相同的结果

google-drive-api - 谷歌云端硬盘 API : Server Export of Collaboration Document

javascript - .withSuccessHandler(updateName) 未执行 $(document).ready 中的函数

google-apps-script - 如何删除谷歌日历中旧的或过去的事件?

google-apps-script - 自定义函数和重新计算

google-apps-script - 根据条件格式化货币

javascript - 从数组复制值时会跳过某些值