jx-xlsx和handsontable顯示excel表格中的合併單元格
1、首先,使用js-xlsx讀取xlsx檔案:
const XLSX = require('xlsx');
var workbook = XLSX.readFile(files[0]);
2、將workbook轉化為二重陣列在hansontable顯示
var sheetArr = XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[0]], {header:1});
var options = {
rowHeaders: true,
colHeaders: true,
manualColumnResize: true,
manualRowResize: true,
}
var container = document.getElementById('xlsxTable');
var hot = new Handsontable(container,options);
hot.loadData(sheetArr)
3、將js-xlsx讀取的合併單元格資料結構轉化為hansontable所需要的格式
function getHotMergedCells (workbook){
var sheets = workbook.Sheets;
var result = {};
for(var name in sheets){
var sheet = sheets[name];
var rawArr = sheet['!merges'];
result[name] = [];
for(var i in rawArr){
var obj = rawArr[i];
var colspan = obj.e.c - obj.s.c + 1;
var rowspan = obj.e.r - obj.s.r + 1;
var handledObj = {
row : obj.s.r,
col : obj.s.c,
rowspan : rowspan,
colspan : colspan
}
result[name].push(handledObj);
}
}
return result;
}
var hotMergedCells =getHotMergedCells(workbook);
options.mergeCells = hotMergedCells[workbook.SheetNames[0]];
hot.updateSettings(options);
效果如下: