3

我正在尝试编写一个脚本来直接将数据从存储在本地硬盘驱动器上的 .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();
}
4

2 回答 2

1

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

请详细阅读这篇文章,因为我已经详细说明了执行此操作的方法。除了文本文件外,这与您的问题相似,我们应该能够将其扩展到 csv 文件而不会出现任何问题。

处理上传的文本文件后在谷歌驱动器中创建新文档

让我知道这对你有用

于 2013-09-14T04:31:48.593 回答
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();
}
于 2013-11-28T17:39:52.337 回答