我试过用下面的脚本不能正常工作。当我下载为CSV格式时,它只是一列而不是标准格式。使用Google Apps脚本,如何下载到CSV格式并将文件保存到我的驱动器或下载?
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var csvMenuEntries = [{name: "export as csv files", functionName: "saveAsCSV"}];
ss.addMenu("csv", csvMenuEntries);
};
答案 0 :(得分:2)
这个脚本怎么样?此脚本从电子表格导出CSV文件并让用户下载。
请将HTML和脚本放在GAS项目中。
html:
此文件名为" download.html"。
<!DOCTYPE html>
<html>
<body>
Download CSV?
<form>
<input type="button" value="ok" onclick="google.script.run
.withSuccessHandler(executeDownload)
.saveAsCSV();" />
</form>
</body>
<script>
function executeDownload(url) {
window.location.href = url;
}
</script>
</html>
脚本:
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('csv')
.addItem('export as csv files', 'dialog')
.addToUi();
}
function dialog() {
var html = HtmlService.createHtmlOutputFromFile('download');
SpreadsheetApp.getUi().showModalDialog(html, 'CSV download dialog');
}
function saveAsCSV() {
var filename = "#####"; // CSV file name
var folder = "#####"; // Folder ID
var csv = "";
var v = SpreadsheetApp
.getActiveSpreadsheet()
.getActiveSheet()
.getDataRange()
.getValues();
v.forEach(function(e) {
csv += e.join(",") + "\n";
});
var url = DriveApp.getFolderById(folder)
.createFile(filename, csv, MimeType.CSV)
.getDownloadUrl()
.replace("?e=download&gd=true","");
return url;
}
流程:
使用&#34; onOpen()&#34;,它会添加用于启动对话框的菜单。
启动对话框后,&#34; saveAsCSV()&#34;通过按下按钮启动。 &#34; saveAsCSV()&#34;导出CSV文件并输出下载URL。在当前脚本中,检索活动工作表上的所有数据并导出CSV。如果您想要检索所需的范围,请使用&#34; getRange()&#34;。
CSV文件由&#34; executeDownload()&#34;下载。
您可以通过&#34; filename&#34;设置csv文件名和输出文件夹。和&#34;文件夹&#34;,分别。在此示例中,源表是当前打开的表。如果您想要其他工作表,请更改此脚本。
如果这对你有帮助,我很高兴。
答案 1 :(得分:0)
我也无法使用它。
var csv = "";
var v = SpreadsheetApp
.getActiveSpreadsheet()
.getActiveSheet()
.getDataRange()
.getValues();
v.forEach(function(e) {
csv += e.join(",") + "\n";
});
我从未使用过join方法,但我确信这是一种智能方法,但我决定用更简单的方法重写它。它不处理字段中有逗号的情况,并且它不会在任何字段周围放置双引号。说实话,我几乎总是用~~~作为我的分隔符。创建包含文本到列的列,生命对我来说更顺畅。换句话说,如果可以的话,我总会采取简单的方法。
这是我的那段代码的版本。也许现在一切都会好起来的。
var csv = '';
var v = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getDataRange().getValues();
for( var i = 0;i < v.length;i++)
{
for(var j = 0; j < v[i].length;j++)
{
if(j>0)
{
csv += ', ';
}
csv += v[i][j].toString();
}
csv += '\n';
}
Tanaike的代码的其余部分看起来应该可行。如果你有任何进一步的麻烦,我会很高兴再看看它。