【问题标题】:TypeError: Cannot read property '0' of undefined for an array already defined in google scriptsTypeError:无法读取已在谷歌脚本中定义的数组的未定义属性“0”
【发布时间】:2021-10-07 18:59:18
【问题描述】:

我有一个 javascript 函数,它应该创建一个动态行数和 4 列的表

谁能告诉我为什么我在运行这个脚本时遇到错误?

var cellText = data [row] [col]; -> 出现错误的地方

我已经单独查看了数组(数据)并填充了它。

下面是我的 javascript 和 html 代码:

function getHtmlTable(table){
 
 var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Emails")
 var Avals = ws.getRange("A1:A").getValues();
var Alast = Avals.filter(String).length;
 var data = ws.getRange(4, 1, (Alast-3), 4).getValues();

  var rangito = ws.getRange("A4");

  // Read table content

  var fontColors = rangito.getFontColors();
  var backgrounds = rangito.getBackgrounds();
  var fontFamilies = rangito.getFontFamilies();
  var fontSizes = rangito.getFontSizes();
  var fontLines = rangito.getFontLines();
  var fontWeights = rangito.getFontWeights();
  var horizontalAlignments = rangito.getHorizontalAlignments();
  var verticalAlignments = rangito.getVerticalAlignments();
  
var col= 1;
var row= 1;

  // Build HTML Table, with inline styling for each cell
  var tableFormat = 'style="border:1px solid black;border-collapse:collapse;text-align:center" border = 1 cellpadding = 5';
  var html = ['<table '+tableFormat+'>'];

   // Populate rows
  for (row= 0;row <= Alast;row++) {
    html.push('<tr style="height: 19px;">');
    for (col= 0 ;col <= 4;col++) {
      // Get formatted data
     
     var cellText = data[row][col];

      var style = 'style="'
                + 'font-family: ' + fontFamilies[row][col]+'; '
                + 'font-size: ' + fontSizes[row][col]+'; '
                + 'font-weight: ' + fontWeights[row][col]+'; '
                + 'background-color: ' + backgrounds[row][col]+'; '
                + 'text-align: ' + horizontalAlignments[row][col]+'; '
                + 'vertical-align: ' + verticalAlignments[row][col]+'; '
                +'"';
      html.push('<td ' + style + '>'
                +cellText
                +'</td>');
    }
   
    html.push('</tr>');
  }
  html.push('</table>');
  
  return html.join('');
}

【问题讨论】:

  • for (row= 0;row &lt;= Alast;row++) row < Alast
  • 出错时data、row和col的值是多少?

标签: javascript html css google-apps-script


【解决方案1】:

var data = ws.getRange(4, 1, (Alast-3), 4).getValues();

getRange: getRange(row, column, numRows, numColumns)

  • row:范围的起始行索引;行索引从 1 开始。
  • column:范围的起始列索引;列索引从 1 开始。
  • numRows:要返回的行数。
  • numColumns:要返回的列数。

所以数据是:getRange(row=4, column=1, numRows=X, numColumns=4),它使数据成为 X x 4 二维数组。

如果您的for 循环您正在运行二维data 数组并调用它,data[row][col],其中调用将达到 4,因为限制条件是col &lt;= 4。因此,只需删除= 符号即可拥有col &lt; 4 或将其更改为col &lt;= 3。不要忘记,大多数编程语言,除了 MatLAB 和少数几个选定的少数,数组从 0 开始,而不是 1,所以索引是从零开始的,应该从长度用 -1 调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多