我在每行的第一个单元格中有chekBoxes的FlexTable,当checkBox为true时,FlexTable行中的数据被收集在变量中。现在我需要创建包含表的文档,该表包含来自变量的数据的表。我试图将字符串的值存储在Hidden中,但它不起作用,无法弄清楚如何实现它。 我所有的(虽然代码不是我的代码,代码几乎是@ Sergeinsas的一半代码)代码可以在这里提供:http://pastebin.com/aYmyA7N2,而不是提前。
答案 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
的标头,我认为这样可以让您的代码更容易维护,而无需对数据进行硬编码...但这只是一个建议; - )