简体   繁体   English

定义js-xlsx单元格范围

[英]Defining a js-xlsx cell range

I'm trying to read excel values using js-xlsx 我正在尝试使用js-xlsx读取Excel值

I'm able to get a cell value from a workbook sheet using the following code 我可以使用以下代码从工作簿工作表中获取单元格值

if(typeof require !== 'undefined') XLSX = require('xlsx');
var workbook = XLSX.readFile('test.xls');
var sheet_name_list = workbook.SheetNames;
var sheet = sheet_name_list.indexOf('sheet_name');
var sheetF48 = workbook.Sheets[sheet_name_list[sheet]]['F48'].v;

What I would like to do next is define a cell range so only those cell values are returned. 接下来,我想定义一个单元格范围,以便仅返回那些单元格值。 I have figured out to get a sheet's ref by: 我想通了以下方法获取工作表的参考:

var sheet1 = workbook.Sheets[sheet_name_list[sheet_name]]
var range = XLSX.utils.decode_range(sheet1['!ref']);

Is it possible to define a cell range by providing the cell references? 是否可以通过提供单元格引用来定义单元格范围?

I use the example ( https://github.com/SheetJS/js-xlsx#general-structures ) but i add some code to get the values. 我使用了示例( https://github.com/SheetJS/js-xlsx#general-structures ),但是我添加了一些代码来获取值。 The mnemonic here is: s for "start of range", e for "end of range", r for "row", c for "column"

var range = { s: { c: 0, r: 0 }, e: { c: 0, r: 4 } };//A1:A5
var dataRange = [];
/* Iterate through each element in the structure */
for (var R = range.s.r; R <= range.e.r; ++R) {
  for (var C = range.s.c; C <= range.e.c; ++C) {
    var cell_address = { c: C, r: R };
    var data = XLSX.utils.encode_cell(cell_address);
    dataRange.push(worksheet[data]);
  }
}

I have been working on the same problem all day. 我整天都在研究相同的问题。 I wasn't able to find a quick solution so if you did I would like to hear. 我找不到快速解决方案,所以如果您愿意,我想听听。 I did find a temporary fix. 我确实找到了一个临时修复程序。 I had the two loops in different objects so they may be combined if wanted. 我在不同的对象中有两个循环,因此可以根据需要将它们组合在一起。

var cellStart = XLSX.utils.encode_cell({c: colStart, r: rowStart});
var cellEnd = XLSX.utils.encode_cell({c: colEnd, r: rowEnd});
var dataRange = [];
var  z =   Object.keys(worksheet);
var i = z.indexOf(cellStart);
while (i!=z.indexOf(cellEnd) {
    dataRange.push(z[i]);
    i++;
    }
var desiredCells = {};
for (n of dataRange) {
    /* all keys that do not begin with "!" correspond to cell addresses */
    if (n[0] === '!') continue;
    desiredCells[n] = worksheet[n];
    }

Jade

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM