You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script报错:数据列数与范围不匹配,求修复

问题修复:提交修改时列数不匹配报错

报错信息

Exception: The number of columns in the data does not match the number of columns in the range. The data has 5 but the range has 1.

场景:通过HTML侧边栏向另一工作簿的表格提交修改,尝试仅更新第5列时触发报错,注释掉的整行更新代码可正常运行。

错误原因

调用sh2.getRange(result+2,5).setValues([row])时,row是包含5个元素的数组(对应HTML里的5个列值),而选中的目标是单个单元格(1行1列范围)。setValues()要求传入的二维数组行列数必须和目标范围完全匹配,这里数据是1行5列、范围是1行1列,因此出现不匹配报错。

修复方案

方案1:最小改动修改Google Apps Script代码

直接从传入的row数组中提取第5列对应的值,用setValue()(单个值更新推荐使用该方法,比setValues()更简洁)更新单元格:

function setSelectedRow(row) {
  let cell = SpreadsheetApp.getCurrentCell();
  let sheet = cell.getSheet();
  var active_range = sheet.getActiveRange()
  var id = sheet.getRange(active_range.getRowIndex(), 1).getValue();
  Logger.log(id)
  var sh2 =SpreadsheetApp.openById('1mtmEMTtdEWk-MqC-5cXIGTefibUirpSjtaFQwAPAO5Q').getSheetByName('Sheet1');
  const searchCol = 1;
  const range = sh2.getRange(2, searchCol,sh2.getLastRow());
  const data = range.getValues();
  const result = data.finder(id);
  Logger.log(result)
  
  // 修复:提取第5列对应的值(数组索引为4),用setValue更新单个单元格
  sh2.getRange(result+2,5).setValue(row[4]);
  
  //sh2.getRange(result+2,1,1,sh2.getLastColumn()).setValues([row]);
}

Array.prototype.finder = function(val){
  if(val == "") return false;
  for(let i=0;i<this.length;i++){
    if(this[i].toString().indexOf(val) > -1) return i;
  }
  return -1;
}

方案2:优化HTML+GS(减少不必要的数据传输)

如果仅需更新第5列,无需传递所有5列的值,仅传递目标列值即可,代码更高效:

修改HTML的submitOnClick函数:

function submitOnClick() {
  try {
    // 仅获取第5列的值
    const column5Value = document.getElementById("column5").value;
    google.script.run.withFailureHandler(
      function (err) {
        alert(err);
      }
    ).setSelectedRow(column5Value);
  }
  catch(err) {
    alert("Error in submitOnClick: "+err);
  }
}

对应修改GS的setSelectedRow函数:

function setSelectedRow(column5Value) {
  let cell = SpreadsheetApp.getCurrentCell();
  let sheet = cell.getSheet();
  var active_range = sheet.getActiveRange()
  var id = sheet.getRange(active_range.getRowIndex(), 1).getValue();
  Logger.log(id)
  var sh2 =SpreadsheetApp.openById('1mtmEMTtdEWk-MqC-5cXIGTefibUirpSjtaFQwAPAO5Q').getSheetByName('Sheet1');
  const searchCol = 1;
  const range = sh2.getRange(2, searchCol,sh2.getLastRow());
  const data = range.getValues();
  const result = data.finder(id);
  Logger.log(result)
  
  // 直接传入单个值更新
  sh2.getRange(result+2,5).setValue(column5Value);
  
  //sh2.getRange(result+2,1,1,sh2.getLastColumn()).setValues([row]);
}

Array.prototype.finder = function(val){
  if(val == "") return false;
  for(let i=0;i<this.length;i++){
    if(this[i].toString().indexOf(val) > -1) return i;
  }
  return -1;
}

内容的提问来源于stack exchange,提问作者Jamie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:01:07