如何从电子表格导出到CSV以驱动或下载文件夹

时间:2017-02-15 16:26:18

标签: google-apps-script

我试过用下面的脚本不能正常工作。当我下载为CSV格式时,它只是一列而不是标准格式。使用Google Apps脚本,如何下载到CSV格式并将文件保存到我的驱动器或下载?

function onOpen() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var csvMenuEntries = [{name: "export as csv files", functionName: "saveAsCSV"}]; 
    ss.addMenu("csv", csvMenuEntries);
};

2 个答案:

答案 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;
}

流程:

  1. 使用&#34; onOpen()&#34;,它会添加用于启动对话框的菜单。

  2. 启动对话框后,&#34; saveAsCSV()&#34;通过按下按钮启动。 &#34; saveAsCSV()&#34;导出CSV文件并输出下载URL。在当前脚本中,检索活动工作表上的所有数据并导出CSV。如果您想要检索所需的范围,请使用&#34; getRange()&#34;。

  3. CSV文件由&#34; executeDownload()&#34;下载。

  4. 您可以通过&#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的代码的其余部分看起来应该可行。如果你有任何进一步的麻烦,我会很高兴再看看它。