我有一个提交表单的应用程序。我确信我的代码很好,但是当我执行应用程序时遇到了这个错误:error encountered script bad value
。
以下是我的两个功能:doGet
写表单,onSumbit
将表单提交到电子表格中
function doGet()
{
var Myapp= UiApp.createApplication();
var panel=Myapp.createAbsolutePanel().setStyleAttributes({'position':'fixed',
'top':'15%',
'left':'2%',
'height':'300',
'width':'500',});
var NameLabel=Myapp.createLabel().setText('Name');
var NameTb=Myapp.createTextBox().setId('Nameid').setName('Name');
var LastNameLabel=Myapp.createLabel().setText('Last name');
var LastNameTb=Myapp.createTextBox().setId('Lastnameid').setName('LastName');
var emailLABEL=Myapp.createLabel().setText('Email');
var emailtb=Myapp.createTextBox().setName('Email');
var serverHandler=Myapp.createServerHandler('onSubmitForm');
var ButtonSubmit=Myapp.createButton('submit',serverHandler);
serverHandler.addCallbackElement(NameTb).addCallbackElement(LastNameTb).addCallbackElement(emailtb);
var panelButton =Myapp.createFlowPanel().setStyleAttributes({'position': 'fixed',
'border' : '2px solid black',
'top' : '80%',
'left' : '70%',
'width' : '55',
'height':'30'});
Myapp.add(panel);
Myapp.add(panelButton);
panel.add(NameLabel);
panel.add(NameTb);
panel.add(LastNameLabel);
panel.add(LastNameTb);
panel.add(emailLABEL);
panel.add(emailtb);
panelButton.add(ButtonSubmit);
return Myapp;
}
function onSubmitForm(e)
{
var Myapp = UiApp.getActiveApplication();
var sheet =SpreadsheetApp.openById('0Ar2BlsmmO4nZdHN6WXp2akx1QWUzX3lKX19rYzUyRVE&usp').getActiveSheet();
var numRows = sheet.getLastRow();
sheet.getRange("A"+lastRow).setValue(e.parameter.Name);
sheet.getRange("B"+lastRow).setValue(e.parameter.LastName);
sheet.getRange("C"+lastRow).setValue(e.parameter.Email);
return Myapp;
}
感谢您的帮助。
答案 0 :(得分:1)
该错误似乎来自spreadSheetApp
来电,此ID是否存在且您是否可以编辑对其的访问权限?
另一点:请勿在该上下文中使用getActiveSheet()
,因为没有电子表格打开,因此没有活动工作表....请改用getSheetByName()
。
最后一点:你使用的是不存在的变量lastRow
....你定义了numRows
,好好利用它! (但添加+1以外,每次提交时都会覆盖最后一行。
这是替换代码:(我为我的测试使用了另一个ID,修改了值并对其进行了检查)
var sheet = SpreadsheetApp.openById('0AnqSFd3iikE3dGFpMm1IMHo5OGZteUZSTEV6NnRUT2c').getSheetByName('Sheet1');
var numRows = sheet.getLastRow()+1;
sheet.getRange("A"+numRows).setValue(e.parameter.Name);
sheet.getRange("B"+numRows).setValue(e.parameter.LastName);
sheet.getRange("C"+numRows).setValue(e.parameter.Email);
最后,为什么不使用更常见的doGet / doPost结构,它会简化脚本,因为它不需要callbackElement和handler ...? 另外,考虑在处理程序函数中添加一些东西来告诉用户他的表单已经提交,否则他们将无限期地点击它;-)