当从变量传递值时,Ui createHTML()不起作用

时间:2012-07-11 14:40:31

标签: google-apps-script

我正在创建一个使用createHTML将数据写入Gadget的脚本,但由于某些原因,当我使用变量时,没有任何内容写入小工具,直接插入文本就可以完美地工作,即createHTML('Hi')。

这是我的代码:

function doGet() {
var app = UiApp.createApplication();
var spreadsheet = SpreadsheetApp.openById('');
var sheet = spreadsheet.getSheetByName('Users');
var user = Session.getActiveUser();
var site = SitesApp.getActivePage();
var url = site.getUrl();
var data = sheet.getDataRange().getValues();

Logger.log(url);
Logger.log(user);

for (var i = 0; i < data.length; i++) {
  var row = data[i];
  var urlI = row[13];
  if (urlI == url){
    var about = row[12]
    Logger.log(about);
    if (about = "")
    {
    Logger.log('0');
    }
    else
    {
      var aboutTxt = app.createHTML('<p>' + about + '</p>');
      app.add(aboutTxt);
      break;
    }
  }
}
 return app;
}

我认为当从电子表格中读取值到变量时,数据类型不是字符串而是对象或其他东西,但我不确定。如果是这种情况,是否有人知道如何将数据类型转换为字符串或其他解决方法?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您的代码看起来不错。你确定执行进入了else {}部分吗? 您提到数据类型可能不是String。要将某些内容转换为String,您可以使用toString()方法。

例如:

about.toString() 

答案 1 :(得分:0)

你能尝试这个简单的测试吗,只需用一些html内容填充一行单元格上的几个单元格,按下按钮时UI将会更新。

var sh = SpreadsheetApp.getActiveSheet();
var ss = SpreadsheetApp.getActiveSpreadsheet();
//
function move() {
   var app = UiApp.createApplication().setTitle("move test")
       .setHeight(100).setWidth(400).setStyleAttribute("background-color","beige");
   var panel = app.createVerticalPanel();
   var next = app.createButton('next').setWidth('180');
   var chkmode = app.createCheckBox("moving mode (checked = up/dwn, unchecked=L/R)").setValue(false).setName('chkmode');
   var cellvaluestring = sh.getActiveRange().getValue().toString();
   var label = app.createHTML('<p>' + cellvaluestring + '</p>').setId('label');
   panel.add(next).add(chkmode).add(label);
   var handler = app.createServerHandler('click').addCallbackElement(panel);
   next.addClickHandler(handler);
   app.add(panel);
   ss.show(app);
 }
//
function click(e) {
  var app = UiApp.getActiveApplication();
  var activeline = sh.getActiveRange().getRow();// get the row number of the selected cell/range
  var activecol = sh.getActiveRange().getColumn();// get the row number of the selected cell/range
  var cellvaluestring = sh.getActiveRange().getValue().toString();
  var label = app.getElementById('label');
  label.setHTML('</p>'+cellvaluestring+'</p>');
  var chkmode=e.parameter.chkmode;
  if(chkmode=="true"){
    activeline++
    }else{
      activecol++}
  var sel=sh.getRange(activeline,activecol);
  sh.setActiveSelection(sel);// make the next row active
  return app;
 }