如何从数据数组创建文档

时间:2013-08-06 03:16:32

标签: google-apps-script

我在每行的第一个单元格中有chekBoxes的FlexTable,当checkBox为true时,FlexTable行中的数据被收集在变量中。现在我需要创建包含表的文档,该表包含来自变量的数据的表。我试图将字符串的值存储在Hidden中,但它不起作用,无法弄清楚如何实现它。 我所有的(虽然代码不是我的代码,代码几乎是@ Sergeinsas的一半代码)代码可以在这里提供:http://pastebin.com/aYmyA7N2,而不是提前。

1 个答案:

答案 0 :(得分:1)

您的代码中存在一些错误... hidden之类的小部件只能包含字符串值,并且只能在检索其值时返回字符串值。

将数组转换为字符串(和返回)的一种可能且简单的方法是使用join()split()的组合,这里是修改后的代码(仅限相关部分)。

// Storing checked rows
function check(e) {
  var checkedArray = [];
  var data = sh.getRange(1,1,lastrow,lastcol).getValues();
  for(var n=0; n < data.length;++n){
    if(e.parameter['check'+n]=='true'){
      checkedArray.push(data[n].join(','));// convert data row array to string with comma separator
    }
  }

  var hidden = app.getElementById('hidden');

  hidden.setValue(checkedArray.join('|'));// convert array to string with | separator

  return app;
}

function click(e) {
  var hiddenVal = e.parameter.hidden.split('|');// e.parameter.hidden is a string, split back in an array of strings, each string should be splitted too to get the original array of arrays

  var d = new Date();
  var time = d.toLocaleTimeString();
  var table = []
  for(var n in hiddenVal){
    table.push(hiddenVal[n].split(','));// reconstruction of a 2D array
  }
  DocumentApp.create('doc '+time).getBody().appendTable(table);// the table is in the document
}

完整代码available here


编辑:建议:如果你把标题放在电子表格中,你可以很容易地在决赛桌中检索它们:

function check(e) {
  var checkedArray = [];
  var data = sh.getRange(1,1,lastrow,lastcol).getValues();
  checkedArray.push(data[0].join(','));// if you have headers in your spreadsheet, you could add headers by default
  for(var n=0; n < data.length;++n){
    if(e.parameter['check'+n]=='true'){
      checkedArray.push(data[n].join(','));
    }
  }

您还可以在data[0]函数中使用doGet来构建UI的标头,我认为这样可以让您的代码更容易维护,而无需对数据进行硬编码...但这只是一个建议; - )