【问题标题】:Excel like indexing in javascriptExcel 类似于 javascript 中的索引
【发布时间】:2017-03-15 14:54:18
【问题描述】:

我写了一个函数,可以将excel之类的索引(A34)转换为JS索引(数组[0][33])。

但当列名更复杂时(例如 AA),它似乎不起作用。

这是我目前的代码

function excel_index(address) {
  let col = address.charCodeAt(0)-65;
  let row = address.substring(1)-1;
  return this[row][col];
}

Array.prototype.excel = excel_index;

【问题讨论】:

  • 你在写.charCodeAt(0),那么你为什么要指望"AA1"会起作用呢?你只占第一个字符

标签: javascript excel matrix indexing


【解决方案1】:

您可以使用 parseInt 以 36 为底,修正 9(这仅获取字母的值)作为值,使用 Array#reduce 获取字母的整数。

26 的因数是字母表的长度,更靠左的字母的位值是 26 的倍数。

function excel_index(address) {
    var col = address.match(/[A-Z]+/)[0],
        row = address.match(/\d+/i)[0];

    return {
        col: col.split('').reduce((r, a) => r * 26 + parseInt(a, 36) - 9, 0) - 1,
        row: row - 1
    };
}

console.log(excel_index('A1'));
console.log(excel_index('AA33'));
console.log(excel_index('ZZ42'));

【讨论】:

  • 26 个字母 (A-Z),parseInt(x,36) 表示以 36 为基数,然后忽略前 10 个,因为它们是数字(占 -9
  • 请注意,"99AA" 会产生与"AA99" 相同的结果,这并不完全类似于 excel 的行为,而是很好的解决方案
  • op 之前可以包含一些健全性检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
相关资源
最近更新 更多