2014-03-27 30 views
0

我刚开始脚本编写我的第一个Google App,我似乎无法通过这个错误。 我的脚本所做的是创建一个表单,允许用户将数据输入到Google电子表格中。 并将文件上传到文件夹BIO。 请帮我一把! 这是代码。Google Apps脚本找不到方法createFile((class))

function doGet(e) { 
    var app = UiApp.createApplication().setTitle('New app'); 
var doc = SpreadsheetApp.openById('0AvOeZM3IzF-GdDRyV3NiTjBreC1ONXh0cHdDMlFhRGc'); 
    var grid = app.createGrid(5, 2); 
    grid.setWidget(0, 0, app.createLabel('Code:')); 
    grid.setWidget(0, 1, app.createTextBox().setName('codeName')); 
    grid.setWidget(1, 0, app.createLabel('Uploaded Date')); 
    grid.setWidget(1, 1, app.createTextBox().setName('date')); 
    grid.setWidget(2, 0, app.createLabel("maid's Name")); 
    grid.setWidget(2, 1, app.createTextBox().setName('maidName')); 

//creates vertical panel and declare as panel 
    var panel = app.createVerticalPanel(); 
    panel.add(grid); 


    var form = app.createFormPanel().setId('frm').setEncoding('multipart/form-data'); 
    panel.add(app.createFileUpload().setName('thefile')); 
    form.add(panel); 

//creates submit button and declare as button 
    var button = app.createButton('submit'); 

//notsure 
    var handler = app.createServerHandler('b'); 

//notsure 
    handler.addCallbackElement(grid); 

//notsure 
    button.addClickHandler(handler); 

//add submit button to panel. 
    panel.add(button); 

//addpanel to application 
    app.add(panel); 

//display application 


    app.add(form); 

    return app; 
} 

function b(e) { 

var doc = SpreadsheetApp.openById('0AvOeZM3IzF-GdDRyV3NiTjBreC1ONXh0cHdDMlFhRGc'); 
var lastRow = doc.getLastRow(); //Find the last row 
var cell = doc.getRange('a1').offset(lastRow, 0); //finds the next empty cell in column A 

cell.setValue(e.parameter.codeName);//i can access paremeter codeName because i setname('codeName') just now. 
cell.offset(0, 1).setValue(e.parameter.date); 
cell.offset(0, 2).setValue(e.parameter.maidName); 

    var Blob = e.parameter.thefile; 
    var folder = DocsList.getFolder('BIO'); 
    folder.createFile(Blob); 



var app = UiApp.getActiveApplication(); 
    var label = app.createLabel('File Upload Sucess') 
    app.close(); //close widget 
    return app; //close widget 


} 

谢谢你们提前!
贾斯珀。

+0

不推荐使用UiApp类。 –

回答

0

为了上传表单中的文件,您必须使用doGet()/ doPost()结构,并使用submitButton而不是您正在使用的“常规”按钮。

请注意,此配置不需要添加callBackElement。

另请注意,表单必须只包含一个元素,并且fileUpload小部件必须是表单的子项。我改变了一下你的UI创作的组织,使它(希望)更清晰。

您的代码应该如下(没有检查错别字):

function doGet() { 
    var app = UiApp.createApplication().setTitle('New app'); 
    var doc = SpreadsheetApp.openById('0AnqSFd3iikE3dFBub2t1Ry1PaXJUMUVkSVVSempCenc'); 
    var form = app.createFormPanel(); 
    var panel = app.createVerticalPanel(); 
    var grid = app.createGrid(5, 2); 
    grid.setWidget(0, 0, app.createLabel('Code:')); 
    grid.setWidget(0, 1, app.createTextBox().setName('codeName')); 
    grid.setWidget(1, 0, app.createLabel('Uploaded Date')); 
    grid.setWidget(1, 1, app.createTextBox().setName('date')); 
    grid.setWidget(2, 0, app.createLabel("maid's Name")); 
    grid.setWidget(2, 1, app.createTextBox().setName('maidName')); 
    //creates vertical panel and declare as panel 
    panel.add(grid); 
    panel.add(app.createFileUpload().setName('thefile')); 
    form.add(panel); 
    app.add(form); 
    var button = app.createSubmitButton('submit'); 
    panel.add(button); 
    return app; 
} 



function doPost(e) { 
    var doc = SpreadsheetApp.openById('0AvOeZM3IzF-GdDRyV3NiTjBreC1ONXh0cHdDMlFhRGc'); 
    var lastRow = doc.getLastRow(); //Find the last row 
    var cell = doc.getRange('a1').offset(lastRow, 0); //finds the next empty cell in column A 
    cell.setValue(e.parameter.codeName);//i can access paremeter codeName because i setname('codeName') just now. 
    cell.offset(0, 1).setValue(e.parameter.date); 
    cell.offset(0, 2).setValue(e.parameter.maidName); 
    var Blob = e.parameter.thefile; 
    var folder = DocsList.getFolder('BIO'); 
    folder.createFile(Blob); 
    var app = UiApp.getActiveApplication(); 
    var label = app.createLabel('File Upload Success') 
    app.add(label); 
    return app; //close widget 
} 

编辑以下您的评论:

获取文件的网址,您刚刚上传,更改代码如下:

... 
    var folder = DocsList.getFolder('BIO'); 
    var url = folder.createFile(Blob).getUrl(); 
    Logger.log(url); 
    ... 
+0

非常感谢! 它就像一个魅力! 因此,我身边的问题是dopost! 我有一些问题。 它的dopost(e)如何?而不是dopost(f)或dopost(c)? 而我正在代码周围,但我似乎无法找到一种方式来返回上传的文件的url字符串。 我想上传文件,获取url并将其粘贴在myspreadsheet上。但我似乎无法找到获取网址的方法。谷歌大师!请帮助我! 非常感谢你! – user3363154

+0

感谢您的接受。电子邮件是为了争取信息,你可以使用你选择的另一个字母,但是你必须在每一次出现的代码中改变它...... e.parameter.thefile会变成c.parameter.thefile,如果你使用c作为字母。 .. - 要获取URL请参阅编辑。 –

+0

糟糕...错字:应阅读“e来eVent信息...”当然:) –