直接从本地驱动器在电子表格中使用.csv数据

时间:2013-09-14 03:46:11

标签: google-apps-script

我正在尝试编写一个脚本,将数据从存储在本地硬盘上的.csv文件直接上传到谷歌电子表格,而不将.csv放入谷歌文档列表。

我意识到谷歌电子表格已经具备了这样做的功能,但我的最终游戏是能够每天从本地驱动器上的.csv上传数据到我的脚本,对其进行排序,并仅返回电子表格中的必要信息。

目前我正在尝试通过在电子表格中将.csv数据作为字符串返回来测试我的readDSR(应该是读取上传的.csv)函数。但它不会起作用。我真的很感激这方面的一些帮助。我的代码在

之下
function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = 
      [ {name:"Read Data", functionName:"readRows"},
        {name:"Upload DSR", functionName:"findDSR()"} ];

  sheet.addMenu("Du-par's", entries);
};

function findDSR() {
  var openFile = UiApp.createApplication();
  var formContent = openFile.createVerticalPanel();
  formContent.add(openFile.createFileUpload().setName("DSRfile"));
  formContent.add(openFile.createSubmitButton("Start Upload"));
  var form = openFile.createFormPanel();
  form.add(formContent);
  openFile.add(form);
  SpreadsheetApp.getActiveSpreadsheet().show(openFile);

}

function readDSR(e) {
  DSR = e.parameter.DSRfile;
  csvFile = DSR.getContentAsString();
  var sheet = getActiveSheet();
  var lastRow = sheet.getLastRow()+1;
  var lastCell = sheet.getLastCell("A"+lastRow);
  lastCell.setValue = csvFile;
  }
}

编辑,9月14日22:48

太棒了,谢谢快速回复。这是我的新剧本,给出了你指导我的另一篇文章中的信息。出于某种原因,我仍然遇到错误,但我现在理解这个概念。我一直在

“遇到错误:发生意外错误。”

这应该给我一个“上传完成”的消息。问题是我在电子表格中执行脚本吗?我很确定问题必须出在“readDSR”函数中。

// Create Menu to Locate .CSV
function findDSR(e) {
  var app = UiApp.createApplication();
  var formContent = app.createVerticalPanel();
  formContent.add(app.createFileUpload().setName("DSRfile"));
  formContent.add(app.createSubmitButton("Start Upload"));
  var form = app.createFormPanel();
  form.add(formContent);
  app.add(form);
  SpreadsheetApp.getActiveSpreadsheet().show(app);

}

// Upload .CSV file
function readDSR(e)
{
  var DSRload = e.parameter.DSRfile;
  var Doc = DriveApp.createFile("DSRload");

  var app = UiApp.getActiveAplication();

  // Display a confirmation Messege
  var label = app.createLable("File Upload Successful");
  app.add(label);

  DocID = getDocId();
  MakeTranslationDoc = DocID;

  return app();
}

2 个答案:

答案 0 :(得分:1)

这是常见的主题,使用简单的UI表单将文件上传到云端硬盘,然后想要用它做一些工作,似乎在GAS的这个阶段可能会被打破。解决方法包括使用Drive API访问刚刚上传的文件,并使用该机制获取数据。

请详细阅读本文,因为我已经详细说明了这一点。这与你的问题类似,除了文本文件,我们应该能够将它扩展到csv文件而没有任何问题。

Create new Doc in Google drive after processing uploaded text file

让我知道这对你有用吗<​​/ p>

答案 1 :(得分:0)

这些答案不起作用的原因很简单:要使用fileUpload小部件,它必须是 doGet / doPost Ui设计的一部分,因此出现“意外错误” 试试这样的例子(简化版):

function doGet() {
  var app = UiApp.createApplication();
  var formContent = app.createVerticalPanel();
  formContent.add(app.createFileUpload().setName("DSRfile"));
  formContent.add(app.createSubmitButton("Start Upload"));
  var form = app.createFormPanel();
  form.add(formContent);
  app.add(form);
  SpreadsheetApp.getActiveSpreadsheet().show(app);

}

function doPost(e){
  var DSRload = e.parameter.DSRfile;
  var Doc = DriveApp.createFile(DSRload);
  DocID = Doc.getId();
//  MakeTranslationDoc = DocID;
  var app = UiApp.getActiveApplication();

  // Display a confirmation Message
  var label = app.createLabel("File Upload Successful");
  var clickHandler = app.createServerHandler('close');
  app.add(label).add(app.createButton('close this window', clickHandler));
  return app;
}

function close(){
  return UiApp.getActiveApplication().close();
}