我可以从Google表格脚本生成文件吗?

时间:2011-08-22 00:04:57

标签: google-apps-script google-sheets google-apps

我正在使用Google表格为我正在做的事情制作一堆数字数据。

有没有办法将子集导出到文本文件?

实际上,我的目标是导出一个文件,我可以将其直接包含在另一个项目的构建中。

那么有没有办法生成一个文本文件供下载?

2 个答案:

答案 0 :(得分:11)

如果您拥有Google Apps帐户,则可以使用DocsList.createFile()创建文本文件并将其保存在文档列表中。

tutorial的第3部分显示了如何将电子表格的选定范围保存为CSV格式的文档列表中的文件。它可以很容易地修改以保存为不同的格式。

答案 1 :(得分:1)

我在Google电子表格的某些列中包含了我的项目文本。 我接受了这个script tutorial from Google并对其进行了修改以仅选择特定范围(在下面的例子中,它是D4:D)。

它会在Drive根文件夹中生成CSV文件。它仍然没有下载文件 - 我现在正在努力。

希望它有所帮助!

/ *以下代码是本教程的修改:https://developers.google.com/apps-script/articles/docslist_tutorial#section3 * /



    /* The code below is a modification from this tutorial: https://developers.google.com/apps-script/articles/docslist_tutorial#section3 */

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

function saveAsCSV() {
  
  // Name the file
  fileName = "quests.csv";
  // Convert the range data to CSV format
  var csvFile = convertRangeToCsvFile_(fileName);
  // Create a file in the root of my Drive with the given name and the CSV data
  DriveApp.createFile(fileName, csvFile);
}

function convertRangeToCsvFile_(csvFileName) {
  // Get from the spreadsheet the range to be exported 
  var rangeToExport = SpreadsheetApp.getActiveSpreadsheet().getRange("D4:D");
  
  try {
    var dataToExport = rangeToExport.getValues();
    var csvFile = undefined;

    // Loop through the data in the range and build a string with the CSV data
    if (dataToExport.length > 1) {
      var csv = "";
      for (var row = 0; row < dataToExport.length; row++) {
        for (var col = 0; col < dataToExport[row].length; col++) {
          if (dataToExport[row][col].toString().indexOf(",") != -1) {
            //dataToExport[row][col] = "\"" + dataToExport[row][col] + "\"";
            dataToExport[row][col] = dataToExport[row][col];
          }
        }

        // Join each row's columns
        // Add a carriage return to end of each row, except for the last one
        if (row < dataToExport.length-1) {
          csv += dataToExport[row].join(",") + "\r\n";
        }
        else {
          csv += dataToExport[row];
        }
      }
      csvFile = csv;
    }
    return csvFile;
  }
  catch(err) {
    Logger.log(err);
    Browser.msgBox(err);
  }
}
&#13;
&#13;
&#13;