将数据从Google云端硬盘中的CSV文件导入Google表格

时间:2016-12-22 11:35:28

标签: csv import google-sheets

我使用SAS每24小时生成两个CSV文件。我使用了bat脚本将生成的CSV文件保存在Google云端硬盘中的文件夹中。 CSV文件已被替换,因此文件夹中始终只有这两个文件。

CSV文件由“,”分隔,并且只包含三列或四列。

我想在google工作表和CSV文件之间创建一个直接链接,以便google工作表自动更新为最新的数字。

我尝试过使用“ImportData”功能但没有运气

=IMPORTDATA("https://drive.google.com/file/d/123231jshu231731/edit?usp=sharing")

其中123231jshu231731是file_id。

但我得到的错误是

Result was not automatically expanded, please insert more columns (896).

由于文件只有3列

,因此没有意义

希望有些人能更好地解决我的自动化问题

由于

3 个答案:

答案 0 :(得分:1)

将csv文件发布到网络

显然IMPORTDATA仅适用于发布到网络的文档。你能让它为你工作的两种方法是:

  1. Store your csv files in a public google drive folder
  2. 以其他方式在网络上托管您的csv文件 - 我想您需要使用csv文件在您的计算机上运行服务器。
  3. 然而,这涉及将您的csv数据公开给任何连接到互联网的人(可能是您不想要的东西)

    保持csv文件的私密性

    如果您希望自己的数据保持私密状态,可以制作一个定期将csv数据加载到电子表格中的脚本。

    Google提供了一个服务电话Google Apps Script(GAS),允许您使用JavaScript编写脚本,以便在Google云端硬盘中执行更复杂的任务。

    在GAS中,你可以创建一个名为installable trigger的东西,你可以将其设置为在设定的时间间隔内定期运行。

    以下是我编写脚本以上传csv数据的基本布局:

    function timedTrigger() {
      // list the csv file ids
      var baseballScoresFileId = "123231jshu231731";
      var donutPricesFileId = "984732ageyn555646";
    
      // get the spreadsheet by it's id
      var ss = SpreadsheetApp.openById("the spreadsheet id");
    
      // get the sheets you want to print the data to
      var baseballSheet = ss.getSheetByName("Baseball Scores");
      var donutsSheet = ss.getSheetByName("Donuts Scores");
    
      // print the data to the first row first columnscript
      printCsvData(baseballScoresFileId, baseballSheet, 1, 1);
    
      printCsvData(donutPricesFileId, donutsSheet, 5, 2); // prints to B5
    }
    
    // This function loads the data from a csv fileId
    //   and prints it to the sheet starting at the cell
    //   located at (row, col)
    // It works just like IMPORTDATA except you specify the row and col in the 
    function printCsvData(fileId, sheet, row, col) {
      // get data from file
      var data = DriveApp.getFileById(fileId).getBlob().getDataAsString();
    
      // parse the csv string into two dimensional array
      var values = parseCsvData(data);
    
      // print the values into the range starting at row, col
      sheet.getRange(row, col, values.length, values[0].length).setValues(values);
    }
    
    // This function converts a string of comma
    //   separated values and converts them into
    //   a two dimensional array
    function parseCsv(string) {
      var values = [];
      // ...
      return values;
    }
    

    我不太确定你是如何格式化你的CSV文件的;我最好的猜测是:

    function parseCSV(string) {
      return string.split("\n").map(function (row) {
        return row.split(",");
      });
    }
    

    您可能需要担心额外的空白。

    如果您不熟悉JavaScript或编程,这将是一个很好的学习机会。但是,如果加载csv文件并非需要,请注意,学习如何设置脚本可能需要5到20个小时。无论哪种方式,祝你好运!

答案 1 :(得分:1)

我喜欢在digital inspiration找到的Google Apps脚本解决方案。

function importCSVFromGoogleDrive() {
  var file = DriveApp.getFilesByName("filename").next();
  var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
  var sheet = SpreadsheetApp.getActive().getSheetByName("sheetname")
  sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}

这与IMPORTDATA()电子表格功能不同,它将覆盖电子表格中已经存在的数据。首次运行该功能时,您需要授权该功能以读取云端硬盘文件并修改电子表格。授权后,您可以添加触发器,使其在每次打开电子表格进行编辑时都可以运行。

答案 2 :(得分:0)

要从每小时一次自动更新的Google云端硬盘中的.CSV文件导入数据,您应该在单元格中使用关注功能。

(1224, 15, 23)

Google电子表格现在将每小时每小时从该文件中获取数据(您无法进行调整。每小时仅在该文件中查找一次)。 URL中的'export = download'选项可以解决问题。您将在电子表格中获得.CSV的精确副本。

您可以在URL中找到的Google驱动器文件的密钥

KEY_DRIVE_FILE(您的Google驱动器文件的密钥)可以在网址中找到,该网址通常位于enter image description here

部分之后

在此图片中,使用了电子表格,但对于任何文件,其工作方式均相同。 该文件可能应该放在驱动器的公用文件夹中。