【发布时间】:2019-06-18 16:53:11
【问题描述】:
每周我都会有一些不同的 Google 表格,我必须将它们下载为 Excel,删除隐藏的行,修复数据,然后通过电子邮件发送出去。
这可能非常耗时,因此我想制作/部署一个脚本来自动执行此过程。
我进行了大量搜索以尝试使其正常工作,但是遇到了一些问题。
首先,表格中的数据是通过查询/导入范围公式提取的,因此一旦下载到 Excel 中,所有数据如下所示:
=IFERROR(__xludf.DUMMYFUNCTION("""COMPUTED_VALUE"""),"No")
这可以防止过滤任何数据。目前我正在通过复制excel中的所有数据并仅粘贴值来解决此问题。我希望更正 Excel 文件,这样我就不必这样做了。
另外,我希望能够通过电子邮件发送转换后的 Excel 文件。
我发现以下代码适用于此:
function getGoogleSpreadsheetAsExcel(){
try {
var ss = SpreadsheetApp.getActive();
var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + ss.getId() + "&exportFormat=xlsx";
var params = {
method : "get",
headers : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
muteHttpExceptions: true
};
var blob = UrlFetchApp.fetch(url, params).getBlob();
blob.setName(ss.getName() + ".xlsx");
MailApp.sendEmail("amit@labnol.org", "Google Sheet to Excel", "The XLSX file is attached", {attachments: [blob]});
} catch (f) {
Logger.log(f.toString());
}
}
这主要是可行的,但再次遇到上述导入范围数据不正确并显示为 =IFERROR(__xludf.DUMMYFUNCTION.
还有两列(A 和 J)是隐藏的,需要删除。
此外,我希望能够通过 GUI 更改电子邮件地址、主题和消息。但这并不重要,也不需要。
我知道这是一个很大的问题,但任何帮助都会很棒!
【问题讨论】:
-
您可以编写一个谷歌脚本函数,用实际值替换由
importrange公式填充的单元格值,并在下载/通过电子邮件发送工作表之前调用它。我建议将此问题集中在该问题上,并将您的其他问题(如电子邮件 GUI)分成其他 SO 问题。 -
@DustinMichels+1 就我个人而言,我会创建 Google 电子表格的副本,然后使用
copyTo(destination, copyPasteType, transposed)命令 Doc ref 复制工作表,将公式转换为值。然后将这些工作表转换为 Excel。
标签: google-apps-script google-sheets google-apps google-sheets-formula google-sheets-query