1. 程式人生 > >jx-xlsx和handsontable顯示excel表格中的合併單元格

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);

效果如下: