如何在Google Apps脚本中添加和添加文本框?

时间:2012-12-09 20:08:24

标签: javascript google-apps-script

如何将以下文本框与下面的逻辑一起添加?

oneTextBox = $120.00,
twoTextBox = .03*oneTextBox,
threeTextBox = oneTextBox + twoTextBox

我还希望每个文本框的单位都是美元($)。


function doGet(e) {
  var app = UiApp.createApplication();

  var VertPanel = app.createVerticalPanel().setId('VertPanel');

  var oneTextBox = app.createTextBox().setText("$120.00").setId("oneTextBox").setName("oneTextBox");
  var twoTextBox = app.createTextBox().setId("twoTextBox").setName("twoTextBox");
  var threeTextBox = app.createTextBox().setId("threeTextBox").setName("threeTextBox");

  app.add(VertPanel);
  VertPanel.add(oneTextBox).add(twoTextBox).add(threeTextBox);

  return app;
}

1 个答案:

答案 0 :(得分:1)

e.parameter.oneTextBox在处理函数中返回的值是一个字符串,在你的例子里它应该是“$ 120.00”,你想要的是一个数值......我建议使用一个replace()删除所有非数字字符并将其转换为如下数字:

var oneTextBoxNumValue = Number(e.parameter.oneTextBox.replace(/[^0-9]/g,''));// the regex ^0-9 takes everything not between 0 and 9 (and replace by '')

在其他文本框上使用相同的过程,您可以在转换后使用数学运算完成所需的一切。

要在$中获得结果,只需在结果中添加“$”

即可
getElementById('oneTextBox').setText(resultNumeric+"$")

唯一棘手的问题是小数点,你需要在转换中考虑到这一点:$120.00,将变为12000的数值,所以不要忘记将结果划分到某个地方或者你的东西会变得非常昂贵! ;-) 此外我有时会遇到一些舍入错误,但总是可以很容易地处理,例如在类似的情况下我必须使用类似的东西才能得到正确的结果:(2.00而不是1.99,如果quant = 2 in下面的例子,请注意我将整数除以100得到2位小数值

 var total = parseInt(Number(quant)*valtotal*100+0.01)/100; 

希望它能从一开始就给出一些想法。

编辑:这里有一个小代码来说明:

function calcTest() {
  var app = UiApp.createApplication().setTitle('TextField Calculator');
  var button = app.createButton('Calculate');
  var handler = app.createServerHandler('calc');
  button.addClickHandler(handler); 
  var grid = app.createGrid(5, 2);
  grid.setText(0, 0, 'value1 ');
  grid.setWidget(0, 1, app.createTextBox().setName('value1').setText('$ 45.00/unit'));
  grid.setText(1, 0, 'value2');
  grid.setWidget(1, 1, app.createTextBox().setName('value2').setText('3 units'));
  grid.setText(2, 0, 'press button to calculate');
  grid.setWidget(2, 1, button);
  grid.setText(3, 0, 'value3 = value1*1.35');
  grid.setWidget(3, 1, app.createTextBox().setId('value3').setEnabled(false));
  grid.setText(4, 0,'sum value1 + value2 + value3');
  grid.setWidget(4, 1, app.createTextBox().setId('sum').setEnabled(false));
  handler.addCallbackElement(grid);
  app.add(grid);
  var ss = SpreadsheetApp.getActive();
  ss.show(app);
  }

function calc(e){
   var app = UiApp.getActiveApplication();
   var value1 = Number(e.parameter.value1.replace(/[^0-9]/g,''))/100;
   var value2 = Number(e.parameter.value2.replace(/[^0-9]/g,''));
   var calcvalue = parseInt(value1*1.35*100)/100
   var sumcalc = calcvalue+value1+value2
   app.getElementById('value3').setText('$ '+calcvalue)
   app.getElementById('sum').setText(sumcalc+' without unit;)')
   return app
  }

enter image description here

编辑2:这是另一个代码,我在应用程序中使用的函数将字符串值转换为欧元,它的方法略有不同但效果很好。

  function toEuro(val){
  if(val==''){temp='';return temp}
  var temp = val.toString().replace(/[^\d\.-]/g,'').split('.');
  if(temp[0]==''){temp[0]='0'}
  if(temp.length==1){var result = temp[0]+',00 €'}
  else{
  var int = temp[0]
  var dec = temp[1]
      if(dec.length==1){var result=int+','+dec+'0 €'}else{var result=int+','+dec+' €'}
  }
  return result
}