灵感来自Moshen Robatjazi的 comments .
SheetJS不提供将特定范围的单元格转换为HTML的内置方法.但是,您可以通过创建一个仅具有所需范围的新工作表,然后将该工作表转换为HTML来实现这一点.以下是如何做到这一点的逐步指南:
- 阅读练习册:
var workbook = XLSX.readFile('yourfile.xlsx');
- 获取工作表:
var worksheet = workbook.Sheets[workbook.SheetNames[0]];
- 获取要转换为HTML的单元格范围:
var range = XLSX.utils.decode_range("E6:G10");
- 创建新工作表:
var new_worksheet = {};
- 将所需范围从原始工作表复制到新工作表:
for(var R = range.s.r; R <= range.e.r; ++R) {
for(var C = range.s.c; C <= range.e.c; ++C) {
/* Find the cell object in the original worksheet */
var cell = worksheet[XLSX.utils.encode_cell({r:R, c:C})];
/* Copy the cell from the original worksheet to the new worksheet */
new_worksheet[XLSX.utils.encode_cell({r:R-range.s.r, c:C-range.s.c})] = cell;
}
}
- 设置新工作表的范围:
new_worksheet['!ref'] = XLSX.utils.encode_range({s:{r:0, c:0}, e:{r:range.e.r-range.s.r, c:range.e.c-range.s.c}});
- 将新工作表转换为HTML:
var html_str = XLSX.utils.sheet_to_html(new_worksheet);
这将为您提供所需范围的HTML字符串.请注意,这将不会维护合并的单元格.如果要保留合并的单元格,则需要将"!Merges"数组从原始工作表复制到新工作表中,并相应地调整区域.
如果您想在范围内添加对合并单元格的支持,则相对简单.
要维护合并的单元格,您需要将"!Merges"数组从原始工作表复制到新工作表中,并相应地调整范围.以下是你如何做到这一点:
- 从原始工作表中获取合并:
var merges = worksheet['!merges'];
- 为新工作表创建新的合并数组:
var new_merges = [];
- 将合并从原始工作表复制到新工作表,调整范围:
for(var i = 0; i < merges.length; ++i) {
var merge = merges[i];
/* Check if the merge is within the desired range */
if(merge.s.r >= range.s.r && merge.e.r <= range.e.r && merge.s.c >= range.s.c && merge.e.c <= range.e.c) {
/* Adjust the range and add to the new merges array */
new_merges.push({
s: {r: merge.s.r - range.s.r, c: merge.s.c - range.s.c},
e: {r: merge.e.r - range.s.r, c: merge.e.c - range.s.c}
});
}
}
- 设置新工作表的合并:
new_worksheet['!merges'] = new_merges;
现在,当您将新工作表转换为HTML时,合并的单元格应该保持不变.请注意,这将仅保持完全在所需范围内的合并.如果合并的开始或结束超出所需范围,则不会包括该合并.这应该在第一组指令中的步骤7之前完成.