4

任务是自动化由菜单选项“文件|下载为|纯文本”完成的手动过程

我希望能够控制保存的文件名,这是无法通过菜单完成的。

在调用它时,用户将坐在电子表格中的工作表上。最终,我会将其设为菜单选项,但为了进行测试,我只是创建了一个可以手动运行的函数。

在阅读了其他几个线程以了解可能的技术之后,这就是我想出的。

它为文件建立一个自定义名称,进行调用,响应代码为 200。

理想情况下,我想避免打开/保存对话框。换句话说,只需保存文件而无需额外的用户干预。我想保存在一个特定的文件夹中,并且我已经使用完整的文件规范进行了尝试,但结果是一样的。

如果我复制记录器中显示的 URL 并将其粘贴到浏览器中,它会启动打开/保存对话框,以便该字符串起作用。

这是作为函数的代码。

function testExportSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var oSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var sId = ss.getId();
var ssID=sId + "&gid=" + oSheet.getSheetId();
var url = "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key="
  + ssID + "&exportFormat=tsv"; 
Logger.log(url);
var fn =  ss.getName() + "-" + oSheet.getSheetName() + ".csv";
var sHeaders = {"Content-Disposition" : "attachment; filename=\"" + fn + "\""};
var sOptions = {"contentType" : "text/html", "headers" : sHeaders};
Logger.log(sOptions);

x = UrlFetchApp.fetch(url, sOptions)
Logger.log(x.getResponseCode());
}
4

4 回答 4

4

我已将电子表格作为 CSV 直接导出到本地硬盘驱动器中,如下所示:

  1. 使用本页教程中的函数 convertRangeToCsvFile_() 的变体从当前工作表获取 CSV 内容https://developers.google.com/apps-script/articles/docslist_tutorial#section3

    var csvFile = convertRangeToCsvFile_(...);
    
  2. 然后使用 Drive 选择一个正在同步到本地计算机的驱动器文件夹

    var localFolder = DocsList.getFolderById("055G...GM");
    
  3. 最后将 CSV 文件保存到“本地”文件夹中

    localFolder.createFile("sample.csv", csvFile);
    

而已。

于 2013-07-15T13:01:27.693 回答
2

此应用程序脚本返回一个供下载的文件,而不是要显示的网页:

function doGet(){
    var outputDocument = DocumentApp.create('My custom csv file name'); 
    var content = getCsv();
    var textContent = ContentService.createTextOutput(content);
    textContent.setMimeType(ContentService.MimeType.CSV);
    textContent.downloadAsFile("4NocniMaraton.csv");
    return textContent;
}
于 2013-07-17T09:06:54.727 回答
2

如果您希望将 s 电子表格中的所有工作表导出到 csv 而不必一个一个地手动执行,这里有另一个关于它的线程:

使用 google drive API 下载 csv 格式的电子表格

于 2014-04-05T19:29:34.553 回答
0

下载就可以了。但不是计算机的“写入硬盘”。

写入问题:您的意思是使用 Google Apps 脚本将文件写入计算机的硬盘?对不起,但你需要的不仅仅是 GAS 来做到这一点。出于安全原因,我怀疑只有 GAS 才能做到这一点,在 GAS 中从未见过这样的事情。

Google Drive API 将让您下载,只需要 OAuth 和您提供的 URL。

于 2013-07-15T03:31:17.030 回答