我正在尝试编写一个脚本,将数据从存储在本地硬盘上的.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;
}
}
太棒了,谢谢快速回复。这是我的新剧本,给出了你指导我的另一篇文章中的信息。出于某种原因,我仍然遇到错误,但我现在理解这个概念。我一直在
“遇到错误:发生意外错误。”
这应该给我一个“上传完成”的消息。问题是我在电子表格中执行脚本吗?我很确定问题必须出在“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();
}
答案 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();
}