Google表格脚本错误 - 无法将数组转换为对象[] [] [英] Google Sheets Script Error - Cannot convert Array to Object[][]

查看:134
本文介绍了Google表格脚本错误 - 无法将数组转换为对象[] []的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写一个脚本来将字段中的数据编码为插入到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] 永远不会被初始化(它总是为NULL)。



解决该问题最简单的方法是在输出到电子表格之前删除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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆