Google表格脚本错误 - 无法将数组转换为对象[] [] [英] Google Sheets Script Error - Cannot convert Array to Object[][]
问题描述
我正在编写一个脚本来将字段中的数据编码为插入到HTML中(这些单元格包含像Planétarium
和 RuaJoãoBettega这样的词, 01
)。我收到一个错误,不知道如何处理它。错误说无法将数组转换为对象[] []
我肯定会将一个两维数组传递给 .setValues()
,所以我知道那不是它(发现这是一个常见问题)。有任何想法吗?这里是我的函数:
// columns []和columns2encode []在此函数上面的作用域中设置
函数_encodeData(){
var sheet = _getSheet();
var data = sheet.getDataRange()。getValues();
var rowCnt = data.length;
var colCnt = data [0] .length;
var data2set = new Array(rowCnt-1); //创建数组w / row.length indeces
var colEncodeIndexList = [];
var origVal,encodedVal,range,cell; //稍后用于循环
toast('开始编码数据');
//循环每行
for(var ri = 0; ri if(ri!== 0){
data2set [ri] = new Array(colCnt); //创建数组w /长度为〜29
}
//循环每个单元格(给定行中的列条目)
for(var ci = 0; ci< data [ri] .length; ci ++){
//获取当前单元格的文本内容
origVal = data [ri] [ci];
//如果第一行,标题 - 保存数组中的匹配以备后用
if(ri === 0){//我将if分离,所以inArray不被称为每个时间
if(inArray(columns2encode,origVal)){//如果在列表上,添加col标题
colEncodeIndexList.push(ci);
}
} else {//不是标题行
// if!第一行,值 - col num必须在保存的头文件中进行编码或者它是一个数字
if(!inArray(colEncodeIndexList,ci)|| typeof origVal ==='number'){
// just使用origVal
data2set [ri] [ci] = origVal;
} else {
//使用encodedVal
encodedVal = _htmlEncode(origVal);
data2set [ri] [ci] = encodedVal;
} // else
} // for(cells / cols)
} // for(rows)
//现在传递数组()的数组(数据)到setValues()
var setRange = sheet.getRange(2,1,(data.length-1),data [0] .length); //。getA1Notation(); //开始于2,1(第2行,第1列)忽略列标题
setRange.setValues(data2set);
toast('已完成的编码数据');
}
感谢您!
解决该问题最简单的方法是在输出到电子表格之前删除data2set [0]:
data2set.shift(); //删除第一项
setRange.setValues(data2set);
I'm working on a script to encode data in fields for insertion into HTML (the cells contain words like Planétarium
and Rua João Bettega, 01
). I am getting an error and don't know what to do with it. The error says "Cannot convert Array to Object[][]"
I'm definitely passing a two-dim array to .setValues()
, so I know that's not it (found that to be a common problem). Any ideas? Here's my function:
// columns[] and columns2encode[] are set in the scope above this function
function _encodeData() {
var sheet = _getSheet();
var data = sheet.getDataRange().getValues();
var rowCnt = data.length;
var colCnt = data[0].length;
var data2set = new Array(rowCnt-1); // creates array w/ row.length indeces
var colEncodeIndexList = [];
var origVal, encodedVal, range, cell; // used later in for loop(s)
toast('Start Encoding Data');
// loop every row
for(var ri = 0; ri < data.length; ri++) {
if(ri !== 0) {
data2set[ri] = new Array(colCnt); // creates array w/ length of ~ 29
}
// loop every cell (column entry in the given row)
for(var ci = 0; ci < data[ri].length; ci++) {
// get text content of current cell
origVal = data[ri][ci];
// if first row, headers - save matches in array for later
if(ri === 0) { // I split the ifs so inArray isn't called EVERY time
if(inArray(columns2encode, origVal)) { // add col header if "on the list"
colEncodeIndexList.push(ci);
}
} else { // isn't the header row
// if ! first row, values - col num must be in saved headers to encode OR it's a number
if(!inArray(colEncodeIndexList, ci) || typeof origVal === 'number') {
// just use origVal
data2set[ri][ci] = origVal;
} else {
// use encodedVal
encodedVal = _htmlEncode(origVal);
data2set[ri][ci] = encodedVal;
}
} // else
} // for (cells/cols)
} // for (rows)
// Now pass array of arrays (data) to setValues()
var setRange = sheet.getRange(2, 1, (data.length-1), data[0].length);//.getA1Notation(); // starts at 2, 1 (row 2, col 1) to ignore column header
setRange.setValues(data2set);
toast('Finished Encoding Data');
}
Thanks in advance!
The problem is that data2set[0]
is never initialized (it is always NULL).
The easiest way to fix the problem is to remove the data2set[0] before outputting to the spreadsheet:
data2set.shift(); // remove 1st item
setRange.setValues(data2set);
这篇关于Google表格脚本错误 - 无法将数组转换为对象[] []的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!