JavaScript实现Excel风格单元格范围转数字格式
Excel单元格范围转数字数组解决方案
这里是完善后的完整代码,包含列字母转数字的核心逻辑,可直接处理单字母、多字母(如AA、AAV)的列转换:
function parseCellRange(cellRange) { // 拆分范围为起始单元格和结束单元格 const [startCell, endCell] = cellRange.split(':'); // 提取单元格的列字母和行号(转成数字) const extractCellParts = (cell) => { const [colLetters] = cell.match(/[a-zA-Z]+/g); const [row] = cell.match(/\d+/g); return { colLetters, row: Number(row) }; }; const { colLetters: startColLetters, row: startRow } = extractCellParts(startCell); const { colLetters: endColLetters, row: endRow } = extractCellParts(endCell); // 列字母转数字的核心函数 const columnLettersToNumber = (letters) => { let number = 0; // 统一转成大写,兼容大小写输入 const upperLetters = letters.toUpperCase(); for (let i = 0; i < upperLetters.length; i++) { // A-Z对应1-26,通过ASCII码计算 const charValue = upperLetters.charCodeAt(i) - 'A'.charCodeAt(0) + 1; number = number * 26 + charValue; } return number; }; const startColumn = columnLettersToNumber(startColLetters); const endColumn = columnLettersToNumber(endColLetters); // 返回要求的格式:[rowStart, columnStart, rowEnd, columnEnd] return [startRow, startColumn, endRow, endColumn]; } // 测试验证 console.log(parseCellRange("A1:B3")); // 输出 [1, 1, 3, 2] console.log(parseCellRange("AA1:AAV5")); // 输出 [1, 27, 5, 724]
关键逻辑说明
- 单元格拆分:通过正则表达式分别提取列字母(
[a-zA-Z]+)和行号(\d+),并将行号转为数字类型。 - 列字母转数字:
- 先将字母统一转为大写(兼容大小写输入,比如
a1和A1处理结果一致)。 - 把列字母看作从1开始的26进制数:每一位的字母对应1-26(A=1,Z=26),遍历每一位时,用
当前值*26 + 字母对应数值的方式累加计算最终列号。比如AAV的计算过程是:0*26+1=1→1*26+1=27→27*26+22=724。
- 先将字母统一转为大写(兼容大小写输入,比如
- 返回格式:严格按照要求的
[行起始, 列起始, 行结束, 列结束]顺序返回数组。
内容的提问来源于stack exchange,提问作者mat
相关产品推荐
相关产品推荐

