使用 GAS 将 google 电子表格转换为 XLSX 或 ODS

2023-12-03

我想将一些谷歌电子表格转换为Excel(首选xlsx)。
我已经阅读了几个有关如何实现此目标的线程,但我无法运行它。
我读过的主题包括Google Apps 脚本:将电子表格保存为 ODS 以进行本地备份 and Google Apps 脚本通过电子邮件发送 Google 电子表格 Excel 版本

为了接近我发现的代码并获取有关其不起作用的更多信息,我修改了我发现的代码,使其仅处理几个文件,并且 try-catch 也已被删除。

****************** Not working code **************
function contentODS(key, gid) 
{
   var file = DocsList.getFileById(key); 

   var fetchParameters = oAuth();

   var url = "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=" + key + "&gid=" + gid + "&exportFormat=ods";
   var response = UrlFetchApp.fetch(url, fetchParameters);

   var fileBlob = response.getBlob();  
   return fileBlob;
}

function oAuth()
{ // https://stackoverflow.com/questions/24493203/google-apps-script-save-spreadsheet-as-ods-for-local-backup
  var oauthConfig = UrlFetchApp.addOAuthService("spreadsheets");
  var scope = "https://spreadsheets.google.com/feeds" 
  oauthConfig.setConsumerKey("anonymous");
  oauthConfig.setConsumerSecret("anonymous");
  oauthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope=" + scope);
  oauthConfig.setAuthorizationUrl("https://accounts.google.com/OAuthAuthorizeToken");    
  oauthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");   

  var requestData =
  {
    "oAuthServiceName":   "spreadsheets",
    "oAuthUseToken":      "always",
    "muteHttpExceptions": true,
    "method":             "DELETE",
  };
  return requestData;
}

function eachSheet(key, newFolderId)
{
  var ss = SpreadsheetApp.openById(key);
  var ssId = ss.getId();
  var ssName = ss.getName();
  var howManySheets = ss.getNumSheets();

  for (var sheetIndex=0; sheetIndex < howManySheets; sheetIndex++)
  {   
     var activeSheet = ss.getSheets()[sheetIndex];
     var activeName = activeSheet.getName();
     var activeId = activeSheet.getSheetId();
     var time = new Date();
     var fileName = time + " Backup: " + ssName + " " + activeName + ".ods";
     var blob = contentODS(ssId, activeId);
     var folder = DocsList.getFolderById(newFolderId);  
     folder.createFile(blob).rename(fileName);
   } 
}

function backUpMaker()
{
  var backupDirectory = 'Backup';
  var folders = DriveApp.getRootFolder().getFoldersByName(backupDirectory);
  var backupFolderId = undefined;
  if (folders.hasNext()) backupFolderId = folders.next().getId();
  else return;  // File doe not exist

  var timeNow = new Date();  
  var newFolder = DocsList.createFolder(timeNow);
  var newFolderId = newFolder.getId();
  newFolder.addToFolder(DocsList.getFolderById(backupFolderId));
  newFolder.removeFromFolder(DocsList.getRootFolder());
  var sheets = DriveApp.getFilesByType(MimeType.GOOGLE_SHEETS);
  while (sheets.hasNext())
  {
    var sheet = sheets.next();
    var name = sheet.getName();

    var filesToSave = [ 'My-Agenda', 'My-Kalender' ];
    var numFiles = filesToSave.length;

    for (var i=0; i<numFiles; i++)
    {
       if (name == filesToSave[i])
       {
          var sheetId = sheet.getId();
          var csv = eachSheet(sheetId, newFolderId); 
          break;
       }  
    }   
  }
  var backupFolder = DocsList.getFolderById(backupFolderId);
  var newFiles = newFolder.getFiles();
  var numFiles = newFiles.length;

  if (numFiles > 0)
  {
     var nameZipFile = timeNow + '.zip';
     backupFolder.createFile(Utilities.zip(newFiles, nameZipFile));
  } 

  newFolder.setTrashed(true);
}

运行 backupmaker 失败var response = UrlFetchApp.fetch(url, fetchParameters);
并指示服务电子表格验证失败

我应该做什么才能让它发挥作用。


您可以使用高级驾驶服务获取导出 URL 并使用脚本的 OAuth2 令牌下载文件。

function exportAsExcel(spreadsheetId) {
  var file = Drive.Files.get(spreadsheetId);
  var url = file.exportLinks['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
  var token = ScriptApp.getOAuthToken();
  var response = UrlFetchApp.fetch(url, {
    headers: {
      'Authorization': 'Bearer ' +  token
    }
  });
  return response.getBlob();
}

function test() {
  var spreadsheetId = 'SPREADSHEET ID HERE';
  DriveApp.createFile(exportAsExcel(spreadsheetId));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 GAS 将 google 电子表格转换为 XLSX 或 ODS 的相关文章

  • 如何在多个文档中使用 Google Apps 脚本

    我有一个谷歌应用程序脚本 我想在多个文档中使用它 我也可能想稍后在这些文档中更改它 因此我必须使用same所有这些文档中的脚本 而不是该脚本的副本 我知道以下问题可能属于重复问题 但我不愿意接受它的答案 Google Apps 脚本 如何在
  • HTML 格式的 Google Apps 脚本

    是否可以在我的 HTML 中使用 google apps 脚本 我希望能够从外部框架 例如 Node js 以纯 Javascript 形式从表单写入电子表格 https developers google com apps script
  • 插入行 python gdata.spreadsheets.client

    我对专门用于谷歌电子表格的 python gdata API 有点困惑 使用 gdata spreadsheet service 可以很容易地组合一个字典并将其作为新行插入到谷歌电子表格中 如下所示http www mattcutts co
  • 在 Google 表格脚本中设置活动单元格的值

    我想创建一个公式 在某个单元格更改上创建时间戳 下面的代码就可以了 我现在想做的是将公式转换为纯文本 将该时间戳锚定到工作表上 如果您手动执行此操作 您将选择时间戳 复制它们并将它们粘贴为值 我不想手动执行此操作 因此我创建了下面的脚本 它
  • 将身份验证从一个 Google Apps 脚本网络应用程序传递到另一 Google Apps 脚本网络应用程序

    我的 Google Apps 帐户中有两个 Google Apps 脚本 两者均已发布为具有以下设置的网络应用程序 脚本A 像我一样执行谁有权访问网络应用程序 XXXXXXX com 内的任何人 脚本B 以访问应用程序的用户身份执行谁有权访
  • 为什么我们使用 SpreadsheetApp.flush()?

    我的理解是 flush https developers google com apps script reference spreadsheet spreadsheet app flush有助于在功能发生时执行这些功能 而无需将它们捆绑在
  • ArrayFormula 破坏了 getLastRow() 函数。可能的解决方法?

    在我的电子表格中 我有一个正在运行的脚本 它使用getLastRow 功能是其逻辑的重要组成部分 自从我在其中一列中应用数组公式以来 getLastRow 功能无法正常工作 即使其他列中没有其他值 数组公式似乎也一直 应用 到工作表的底部
  • 如何使用Google脚本获取当前单元格下单元格的值?

    我找不到看起来像这样的选项 var spreadsheet SpreadsheetApp getActive var sheet spreadsheet getActiveSheet sheet getRange sheet getCurr
  • 我们可以使用 Google Spreadsheet 作为后端数据库吗

    我正在尝试开发一个应用程序 在其中从与某些事务相关的多个客户端获取数据 现在我想使用 Google Spreadsheet 进行一些分析 有什么方法可以使用 ASP Net MVC 使用 C 实现此目的 Google 提供 OAuth 当我
  • 如何在谷歌电子表格中获取台湾证券交易所指数

    如何在谷歌电子表格中获取台湾证券交易所指数 该索引确实存在于谷歌金融中https www google com finance q TPE 3ATAIEX https www google com finance q TPE 3ATAIEX
  • 有没有办法导入/导出容器绑定脚本

    我有一个插件 它使用 appscripts gs 以及 html js 和 css 文件 目前我们所做的是我们有一个参考 Google 文档 其中有一个脚本项目包含所有这些源代码 但是除了手动复制和粘贴之外 没有办法在 GIT 中保留源代码
  • 使用 JavaScript 以编程方式编辑 Google 文档

    我想做的是运行一些 JavaScript 代码 将文本输入到 Google 文档中 到目前为止 我所做的是在我的个人网页上创建一个嵌入 Google 文档的 iframe 元素 目前我想做的是使用 Google 源代码中的函数来输入文本 当
  • 从电子表格脚本中调用 Web 应用程序脚本?

    如何从 Google 电子表格容器中的脚本调用外部 Google Web App 脚本 我有许多动态创建的电子表格 并希望它们全部调用一个 Web 应用程序 以实现一致性和易于维护 看看这篇博文 触发主从电子表格之间的更新 http www
  • 将时间戳转换为一个数组

    在应用程序脚本 谷歌表中运行 我从 API 获取时间戳并返回此结果 1 6370611672429312E18 1 63706107263277082E18 我执行此代码并且工作正常 但问题不在数组中 我每次都需要它在数组中 const t
  • 如何通过 Apps Script & Drive SDK 创建新的脚本文件

    尝试通过在 Apps 脚本中调用 Drive SDK 来创建包含文件的新项目 下面的内容到底会放在哪里UrlFetchApp要求 files id 9basdfbd 749a 4as9b b9d1 d64basdf803 name Code
  • Google Apps 脚本中 $.ajax() 的服务器端等效项是什么?

    我想在 Google App 脚本中从服务器端代码执行 HTTP 请求Authorization标头 是否有用于发送 HTTP 请求的 App Script API Google Apps 脚本中的这段代码相当于什么 var api URL
  • Google Apps 脚本触发器 - 每当将新文件添加到文件夹时运行

    我想在任何时候执行谷歌应用程序脚本new文件被添加到特定文件夹 目前 我使用的是每 x 分钟运行一次的时钟触发器 但我只需要在向文件夹添加文件时运行脚本 有没有办法做到这一点 与this https stackoverflow com qu
  • 在 userCodeAppPanel 中看不到我的 javascript 代码

    这是来自 Google 电子表格中包含的脚本的代码 唯一的其他代码是onOpen它创建菜单和showDialog 功能 function showDialog userInterface HtmlService createHtmlOutp
  • 有没有办法将 Google 文档分割成多个 PDF?

    我想在 Google Scripts VBA 代码中复制我为 Word 文档编写的代码 基本上 它通过搜索我插入文档中的标签 将文档 切片 为多个 PDF 文件 目的是允许合唱团使用 forScore 管理乐谱的应用程序 在切片点插入先前注
  • Google Add-on 在有限模式应用脚本中添加菜单项

    我们在新的谷歌应用程序脚本添加商店中发布了一个插件 但在除安装的初始电子表格之外的任何电子表格中使用该插件时 权限似乎无法正常工作 我遇到一个问题 当创建新电子表格并且用户从 管理加载项 菜单中选择 使用此加载项 时 我们的菜单项不会填充

随机推荐

  • 使用 volley 以 json 格式将数据发送到服务器

    您好 我正在以 json 格式将数据发布到服务器 但它在错误响应中返回齐射服务器错误 RequestQueue queue Volley newRequestQueue this JSONObject jobj new JSONObject
  • 自定义html标签——有更好的方法吗?

    我正在尝试完成一个浏览器插件 它将分析文本并以某种方式标记它 基本上 假设您在浏览时发现页面中的某处出现了此文本 p and then Tom Cruise devoured the planet p 该插件正在扫描文本并会找到 Tom C
  • JS:将数组减少为嵌套对象

    所以我有这个数组 var mapped 2016 October Monday object 2017 January Friday object 2017 January Wednesday object 2017 October Mon
  • 勾画出图中的区域

    我有两个 2D numpy 数组 尺寸相同 我正在使用 matplotlib 绘制它们 我将第一个数组绘制为灰度彩色图 第二个代表光圈 但它是不规则形状 一些像素被勾勒出轮廓 它是形成轮廓的一组水平和垂直线 我不知道如何要求它绘制第二个数组
  • 多边形三角剖分的相反是什么?

    完成 2D 三角测量后 一些三角形具有相同的颜色 我想重新组合它们以绘制类似颜色的图形路径 我发现 如果我只是一一绘制三角形 一些图形渲染器会显示三角形之间的接缝 至少在涉及抗锯齿和 或透明度的情况下 那么 如何获取一组 不重叠 三角形并生
  • 使用 ctop.xsl 的内容 mathml 到中缀表示法未获得所需格式

    我正在尝试从内容 mathml 中制作数学符号或中缀表达式 我正在提供帮助ctop xsl为了这 ctop xsl Refer 可以解析得到表达式如下
  • 互斥锁所有权队列顺序

    假设我有三个线程 它们都通过互斥体访问相同的互斥部分 让我给你举这个例子 第一个线程探测互斥体并首先获取其所有权 THREAD 1 TIME 2013 03 13 01 00 00 000Z WaitForSingleObject hMut
  • 如何使用 OpenCV 检测白色斑点

    I paint a picture to test 我想知道黑色圆圈中有多少斑点以及每个斑点的大小是多少 所有斑点都是白色的 For example in this case I have 12 spots 我知道如何找到白色像素 并且很容
  • 获取TCL中执行代码的行号

    如何打印执行TCL脚本的行号 usr bin tclsh set a 100 set b 200 set c expr a b puts info script it will display the script name which i
  • 如何将静态部分添加到javapoet中的java类中

    有没有办法使用javapoet库将静态代码块添加到java类中 static whatever code is needed for initialization goes here Use TypeSpec Builder addStat
  • 为什么没有安装tensorflow?

    我无法安装张量流 显示此错误 错误 找不到满足张量流要求的版本 来自版本 无 错误 找不到张量流的匹配分布 我安装了Python 3 11 但再次收到相同的错误消息 我用谷歌搜索了这个错误 并尝试了一些向其他人建议的方法 但没有任何效果 包
  • 使工作簿保存中特定工作表的字段成为必填字段

    我在 Excel 中使用宏来使 Excel 工作簿中的字段成为必填字段 但是 问题是工作簿包含多个工作表 并且宏适用于所有工作表 有没有办法定位工作簿中的特定工作表 下面是我正在使用的代码 Private Sub Workbook Befo
  • SwiftUI 如何设置下划线与文本之间的间距?

    设置下划线的代码 我想让文字和下划线之间的间距变大 Text underline text underline 下划线是一种字体功能 您只需在需要的地方画线即可进行自定义 var body some View HStack Text Bef
  • 为什么不能用 C 语言编写 scanf("%.2lf", &a) ?

    我的朋友刚刚开始学习编程 他向我展示了他的代码并询问为什么它返回一些奇怪的数字 我看了一下 发现他用的是scanf 2lf a 接受输入 并按照习惯 我尝试将其更改为正常 然后他问我为什么它有一些奇怪的输出 谷歌搜索后我仍然没有找到答案 谁
  • EmailProperty 与 StringProperty 有何不同?

    如何EmailProperty与 不同StringProperty 考虑这两个例子 example 1 store an e mail address in an EmailProperty class MyModel db Model e
  • 如何在android中的一个布局上显示一半按钮,在另一个布局上显示一半按钮?

    我想设计一个如下图所示的布局 我尝试使用相对布局来做到这一点 但我没有想出解决方案 对于所有设备屏幕 它应该位于相同的位置 我怎样才能实现它 我尝试了这段代码
  • 如何在画布上绘制位图,同时尊重位图的 alpha 值?

    背景 我有一个主位图 我需要在其上绘制其他位图 主位图有一些半透明像素 具有 Alpha 通道变量值的像素 因此在其上绘制的其他位图应与其合并 而不是完全覆盖颜色 问题 我如何设置画布以在主位图上绘制相对于半透明像素的位图 注意 alpha
  • 调用表值函数时添加查询提示

    我正在从实体框架调用表值函数 并且需要能够添加option recompile 因为它选择的执行计划不是最佳的 在 SQL Server Management Studio 中运行查询 它看起来像这样 select from dbo fDE
  • Python、__init__ 和自我困惑

    好吧 当我发现这个时 我正在查看一些来源 gt gt gt def parse self filename parse ID3v1 0 tags from MP3 file self clear try fsock open filenam
  • 使用 GAS 将 google 电子表格转换为 XLSX 或 ODS

    我想将一些谷歌电子表格转换为Excel 首选xlsx 我已经阅读了几个有关如何实现此目标的线程 但我无法运行它 我读过的主题包括Google Apps 脚本 将电子表格保存为 ODS 以进行本地备份 and Google Apps 脚本通过