每周我都有一些不同的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());
}
}
这通常可行,但再次遇到上述问题,即importrange数据不正确并显示为= IFERROR(__ xludf.DUMMYFUNCTION。
还有两列(A和J)被隐藏,需要删除。
此外,我希望能够通过GUI更改电子邮件地址,主题和消息。但这并不重要,不需要。
我知道这是一个很大的问题,但是任何帮助都会很棒!
答案 0 :(得分:0)
此脚本解决了部分问题。
注意:有多个选项可用于将公式转换为值。
就通过GUI更改电子邮件地址,主题和消息而言,我建议使用custom sidebar。
function so5665379502(){
/*
// The purpose of this script is to copy the content of one sheet to another;
// converting formulas to values
// and deleting columns
*/
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetname = "ejbsheet01";
var sourcesheet = ss.getSheetByName(sheetname);
var destname = "ejbsheet02";
var destinationSheet = ss.getSheetByName(destname);
sourcesheet.activate();
var range = sourcesheet.getDataRange();
var rFC = range.getColumn();
var rLC = range.getLastColumn();
var rFR = range.getRow();
var rLR = range.getLastRow();
//Logger.log("DEBUG: the data range = "+range.getA1Notation()+", column 1 = "+rFC+", the last column = "+rLC+", first row = "+rFR+", last row = "+rLR);
// syntax copyValuesToRange(sheet, column, columnEnd, row, rowEnd)
range.copyValuesToRange(destinationSheet, rFC, rLC, rFR, rLR);
// delete column J first so that other column numbers don't chnage.
// column J = 10
destinationSheet.deleteColumn(10);
// Delete Column A
// column A = 1
destinationSheet.deleteColumn(1);
}