将数据从 Google Drive 中的 CSV 文件导入到 Google Sheet

问题描述 投票:0回答:5

我使用 SAS 每 24 小时生成两个 CSV 文件。我使用 bat 脚本将生成的 CSV 文件保存在 Google Drive 的文件夹中。 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 列

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

谢谢

csv import google-sheets
5个回答
4
投票

将 csv 文件发布到网络

显然

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

  1. 将您的 csv 文件存储在公共 Google Drive 文件夹中
  2. 以其他方式在网络上托管您的 csv 文件 - 我想您需要在计算机上使用 csv 文件运行服务器。

但是,这涉及将您的 csv 数据公开给连接到互联网的任何人(可能是您不想要的)


将 csv 文件保密

如果您希望数据保持私密性,您可以编写一个脚本来定期将 csv 数据加载到电子表格中。

Google 提供服务调用 Google Apps Script (GAS),它允许您用 JavaScript 编写脚本以在 google 云端硬盘中执行更复杂的任务。

在 GAS 中,您可以创建称为“可安装触发器”的东西,您可以将其设置为按设定的时间间隔定期运行。 以下是我如何编写脚本来上传 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 小时来学习如何设置脚本。不管怎样,祝你好运!


4
投票
digitalspiration

找到的 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()

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

    


3
投票

=IMPORTDATA("https://drive.google.com/uc?export=download&id=KEY_DRIVE_FILE")

Google 电子表格现在每小时都会从该文件中获取数据(您无法调整此设置。它只是每小时在该文件中查找一次)。
URL 中的“export=download”选项就可以解决这个问题。您将在电子表格中获得 .CSV 的精确副本。 

您可以在 URL 中找到 Google 云端硬盘文件的密钥

KEY_DRIVE_FILE(您的 Google 云端硬盘文件的密钥)可以在 url 中找到,通常在

enter image description here 部分之后找到 在此图片中使用了电子表格,但它对于任何文件的工作方式都是相同的。 该文件可能应该放在驱动器的公共文件夹中。


0
投票
KEY_DRIVE_FILE

可以通过分享Drive功能来获取链接(实际上不需要分享)。

    


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.