jquery grid supports import and export of Excel workbook.

While import and export, javascript workbook is created as shown in the diagrams below:

Excel xlsx pq.excel.importXl js workbook grid.importWb grid grid grid.exportData js workbook pq.excel.exportWb Excel xlsx

These are the apparent benefits of javascript workbook

  1. It's a javascript object which can be manipulated on the fly with familiar array, object, string manipulation techniques in javascript.
  2. Its high level abstract structure saves you the trouble from understanding the low level structural details of Excel xlsx file.
  3. It can be persisted in and read from remote storage as such by serializing to json string.
  4. Not only ParamQuery grid, but third party javascript components can also use javascript workbook to import and export Excel xlsx file.

Following is the schema / structure of javascript workbook expressed in javascript / typescript.

var workbook = {
    //sheets represents the worksheets in a workbook.
    sheets: [
            name?: string
            columns?: [worksheetColumn]
            frozenRows?: number
            frozenCols?: number
            mergeCells?: [string]
            /**number of header rows in rows. */
            headerRows?: number
            rows: [worksheetRow]

interface worksheetColumn{
    hidden?: boolean
    width?: number
    /**Zero based index of column*/
    indx?: number
interface worksheetCell{
    /**horizontal alignment of cell. */
    align?: string
    /**background color with hexadecimal 6 digit format i.e., ff0000 for red */
    bgColor?: string
    bold?: boolean
    /**text color with hexadecimal 6 digit format i.e., ff0000 for red */
    color?: string            
    /**dataIndx of cell while export of grid */
    dataIndx?: string | number
    /**Zero based index of cell*/
    indx?: number
    italic?: boolean
    /**font family */
    font?: string            
    fontSize?: number
    /**Excel format string for numbers, dates */
    format?: string
    /**formula without leading = sign */
    formula?: string
    underline?: boolean
    valign?: string
    value?: any
    wrap?: boolean
interface worksheetRow{
    /**Zero based index of row*/
    indx?: number
    cells: [worksheetCell]
    hidden?: boolean