[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\":[\n    \"es2015\",\n    \"stage-1\"\n  ]\n}"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (http://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# Typescript v1 declaration files\ntypings/\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variables file\n.env\n"
  },
  {
    "path": "README.md",
    "content": "# Table2Excel.js\n\nThis is a library to export html tables to excel sheets.\n\n## Precondition\n\nIt has to be a row * column table\n\n## Features\n\n1. able to export with width, alignment and colors\n2. extendable\n\n## Dependencies\n\n[ExcelJS](https://github.com/guyonroche/exceljs)\n\n[FileSaver.js](https://github.com/eligrey/FileSaver.js)\n\n## Live Demo\n\n[Demo](https://jackgit.github.io/table2excel.js/index.html)\n\n## Include table2excel.js\n\n### npm\n\n`ExcelJS` is peer dependency to `table2excel.js`, so you need to install exceljs first:\n\n```bash\nnpm i exceljs\n```\n\nthen, install table2excel.js:\n\n```bash\nnpm i table2excel.js\n```\n\nuse in your code like:\n\n```js\nimport Table2Excel from 'table2excel.js'\nnew Table2Excel('table').export()\n```\n\nyou may also need a config in webpack:\n\n```js\nnode: { fs: 'empty' }\n```\n\n### table2excel.min.js (with ExcelJS packed)\n\n```html\n<script src=\"path/to/table2excel.min.js\"></script>\n```\n\n### table2excel.core.js (without ExcelJS packed)\n\n```html\n<script src=\"path/to/exceljs.min.js\"></script>\n<script src=\"path/to/table2excel.core.js\"></script>\n```\n\n## Basic Usage\n\n```js\nconst table2Excel = new Table2Excel(selector, options)  // new Table2Excel('table')\ntable2Excel.export(fileName, extension) // table2Excel.export('my-exported-table', 'xlsx')\n```\n\n`extension` can be `'xls'` or `'xlsx'`, default as `'xlsx'`\n\n### selector\n\nIt's optional, and defaulted as `'table'`\n\n### options\n\nIt's optional, and defaulted as:\n\n```js\n{\n  workbook: {\n    views: [{\n      x: 0, y: 0, width: 10000, height: 20000,\n      firstSheet: 0, activeTab: 1, visibility: 'visible'\n    }]\n  },\n  widthRatio: .14,\n  plugins: [\n    Table2Excel.plugins.fontPlugin,\n    Table2Excel.plugins.fillPlugin,\n    Table2Excel.plugins.formPlugin,\n    Table2Excel.plugins.alignmentPlugin,\n    Table2Excel.plugins.hyperlinkPlugin,\n    Table2Excel.plugins.autoWidthPlugin\n  ]\n}\n```\n\n`workbook` is options used while creating a workbook, please refer [exceljs#create-a-workbook](https://github.com/guyonroche/exceljs#create-a-workbook) for details.\n\n`widthRatio` is a ratio that will be used while converting `width` style of html table cells to width of sheet cells.\n\n## Plugins\n\nPlugin helps to extend the ability of transforming table to excel.\n\nBuild-in plugins can be access like:\n\n```js\nTable2Excel.plugins.fontPlugin,\nTable2Excel.plugins.fillPlugin,\nTable2Excel.plugins.formPlugin,\nTable2Excel.plugins.alignmentPlugin,\nTable2Excel.plugins.hyperlinkPlugin,\nTable2Excel.plugins.autoWidthPlugin\n```\n\nA plugin can be defined to join different phase of table to excel process, and in different phase, plugin is able to access different objects from context.\n\n```js\n{\n  /**\n   * after an empty workbook created\n   * @param  {ExcelJS.Workbook} context.workbook\n   * @param  {NodeList} context.tables   \n   */\n  workbookCreated ({ workbook, tables }) {},\n  /**\n   * after an empty worksheet created\n   * @param  {ExcelJS.Workbook} workbook\n   * @param  {NodeList} tables\n   * @param  {ExcelJS.Worksheet} worksheet\n   * @param  {HTMLTableElement} table\n   */\n  worksheetCreated ({ workbook, tables, worksheet, table }) {},\n  /**\n   * after a worksheet been filled with data from table\n   * @param  {ExcelJS.Workbook} workbook\n   * @param  {NodeList} tables\n   * @param  {ExcelJS.Worksheet} worksheet\n   * @param  {HTMLTableElement} table\n   */\n  worksheetCompleted ({ workbook, tables, worksheet, table }) {},\n  /**\n   * after an cell of worksheet created\n   * @param  {ExcelJS.Workbook} workbook\n   * @param  {NodeList} tables\n   * @param  {ExcelJS.Worksheet} worksheet\n   * @param  {HTMLTableElement} table\n   * @param  {ExcelJS.Cell} workcell\n   * @param  {HTMLTableCellElement} cell\n   * @param  {colRange} [from, to]\n   * @param  {rowRange} [from, to]\n   */\n  workcellCreated ({ workbook, tables, worksheet, table, workcell, cell, cellStyle, colRange, rowRange }) {}\n}\n```\n\n\nExample 1, you can define a plugin to make some rows or columns hidden of exported excel:\n\n```js\nconst table2Excel = new Table2Excel('table', {\n  plugins: [{\n    worksheetCompleted ({ workbook, tables, worksheet, table }) {\n      worksheet.getRow(1).hidden = true\n      worksheet.getColumn(1).hidden = true\n    }\n  }]\n})\n```\n\nExample 2, you can add your customized cell parser for your table:\n\n```js\nconst table2Excel = new Table2Excel('table', {\n  plugins: [{\n    workcellCreated ({ workbook, tables, worksheet, table, workcell, cell, cellStyle, rowRange, colRange }) {\n      workcell.value = { text: '', link: '' }\n      workcell.style = {\n        ...workcell.style,\n        font: {},\n        color: {}\n      }\n    }\n  }]\n})\n```\n"
  },
  {
    "path": "dist/table2excel.core.js",
    "content": "!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t(require(\"ExcelJS\")):\"function\"==typeof define&&define.amd?define([\"ExcelJS\"],t):\"object\"==typeof exports?exports.Table2Excel=t(require(\"ExcelJS\")):e.Table2Excel=t(e.ExcelJS)}(window,function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=3)}([function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.argb=t.mergeCells=t.cellPosition=t.columnIndex=t.saveAsExcel=void 0;var r=n(1),o=n(6),l=(t.saveAsExcel=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"table\",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"xlsx\",l=r.MIME_TYPES[n];l?e.xlsx.writeBuffer().then(function(e){(0,o.saveAs)(new Blob([e.buffer],{type:l}),t+\".\"+n)}):console.error(n+\" file extension is not supported\")},function(e){var t=\"A\".charCodeAt(0);return String.fromCharCode(t+e-1)}),i=t.columnIndex=function(e){var t=void 0;if((e+=1)<=26)t=l(e);else{var n=e%26,r=Math.floor(e/26);t=0===n?l(r-1)+l(26):l(r)+l(n)}return t},a=t.cellPosition=function(e,t){return\"\"+i(e)+(t+1)};t.mergeCells=function(e,t,n,r,o){var l=a(t,n),i=a(r,o);return e.mergeCells(l,i),e.getCell(l)},t.argb=function(e){var t=e.split(\"(\")[1].split(\")\")[0].split(\",\").map(function(e,t){return 3===t?255*e:e});return 3===t.length&&t.push(255),t.unshift(t.pop()),t.map(function(e){var t=parseInt(e).toString(16);return 1===t.length?\"0\"+t:t}).join(\"\").toUpperCase()}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});t.MIME_TYPES={xls:\"application/vnd.ms-excel\",xlsx:\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"},t.WIDTH_RATIO=.14},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=c(n(9)),o=c(n(10)),l=c(n(11)),i=c(n(12)),a=c(n(13)),u=c(n(14));function c(e){return e&&e.__esModule?e:{default:e}}t.default={fontPlugin:r.default,fillPlugin:o.default,formPlugin:l.default,alignmentPlugin:i.default,hyperlinkPlugin:a.default,autoWidthPlugin:u.default}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=i(n(4)),o=i(n(2)),l=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(0));function i(e){return e&&e.__esModule?e:{default:e}}r.default.plugins=o.default,r.default.utils=l,t.default=r.default},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=u(n(5)),l=n(0),i=n(1),a=u(n(2));function u(e){return e&&e.__esModule?e:{default:e}}var c=[\"workbookCreated\",\"worksheetCreated\",\"worksheetCompleted\",\"workcellCreated\"],f={workbook:{views:[{x:0,y:0,width:1e4,height:2e4,firstSheet:0,activeTab:1,visibility:\"visible\"}]},widthRatio:i.WIDTH_RATIO,plugins:[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(Object.values(a.default)))},s=function(){function e(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"table\",r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.tables=Array.from(\"string\"==typeof n?document.querySelectorAll(n):n),this.options=Object.assign({},f,r),this.plugins={},c.forEach(function(e){t.plugins[e]=t.options.plugins.filter(function(t){return t[e]}).map(function(t){return t[e]})}),this.pluginContext={}}return r(e,[{key:\"_invokePlugin\",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.pluginContext=Object.assign({},this.pluginContext,n),this.plugins[e].forEach(function(e){return e.call(t,t.pluginContext)})}},{key:\"toExcel\",value:function(){var e=this,t=this.tables,n=this.options,r=new o.default.Workbook;return Object.assign(r,n),this._invokePlugin(\"workbookCreated\",{workbook:r,tables:t}),t.forEach(function(t,n){var o=r.addWorksheet(\"Sheet \"+(n+1));e._invokePlugin(\"worksheetCreated\",{worksheet:o,table:t}),e.toSheet(t,o),e._invokePlugin(\"worksheetCompleted\",{worksheet:o,table:t})}),this.workbook=r}},{key:\"toSheet\",value:function(e,t){var n=this,r=e.rows.length,o=0;if(e.rows.length>0)for(var i=0;i<e.rows[0].cells.length;i++)o+=e.rows[0].cells[i].colSpan;var a=[];Array.from(e.rows).forEach(function(e){Array.from(e.cells).forEach(function(e){a.push({rowRange:{},colRange:{},el:e})})});for(var u=[],c=0;c<r;c++){for(var f=[],s=0;s<o;s++)f.push({cell:null});u.push(f)}for(var d=0,p=0;p<r;p++)for(var v=0;v<o;v++)if(!u[p][v].cell){var h=a[d++],g=h.el,b=g.rowSpan,w=g.colSpan;h.rowRange={from:p,to:p},h.colRange={from:v,to:v};for(var y=p;y<p+b;y++)for(var m=v;m<v+w;m++)u[y][m].cell=h,h.colRange.to=m,h.rowRange.to=y}a.forEach(function(e){var r=e.rowRange,o=e.colRange,i=e.el,a=i.innerText,u=(0,l.mergeCells)(t,o.from,r.from,o.to,r.to),c=getComputedStyle(i);u.value=a,n._invokePlugin(\"workcellCreated\",{workcell:u,cell:i,rowRange:r,colRange:o,cellStyle:c})})}},{key:\"export\",value:function(e,t){this.workbook||this.toExcel(),(0,l.saveAsExcel)(this.workbook,e,t)}}]),e}();t.default=s},function(t,n){t.exports=e},function(e,t,n){var r,o=o||function(e){\"use strict\";if(!(void 0===e||\"undefined\"!=typeof navigator&&/MSIE [1-9]\\./.test(navigator.userAgent))){var t=function(){return e.URL||e.webkitURL||e},n=e.document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"a\"),r=\"download\"in n,o=/constructor/i.test(e.HTMLElement)||e.safari,l=/CriOS\\/[\\d]+/.test(navigator.userAgent),i=function(t){(e.setImmediate||e.setTimeout)(function(){throw t},0)},a=function(e){setTimeout(function(){\"string\"==typeof e?t().revokeObjectURL(e):e.remove()},4e4)},u=function(e){return/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(e.type)?new Blob([String.fromCharCode(65279),e],{type:e.type}):e},c=function(c,f,s){s||(c=u(c));var d,p=this,v=\"application/octet-stream\"===c.type,h=function(){!function(e,t,n){for(var r=(t=[].concat(t)).length;r--;){var o=e[\"on\"+t[r]];if(\"function\"==typeof o)try{o.call(e,n||e)}catch(e){i(e)}}}(p,\"writestart progress write writeend\".split(\" \"))};if(p.readyState=p.INIT,r)return d=t().createObjectURL(c),void setTimeout(function(){n.href=d,n.download=f,function(e){var t=new MouseEvent(\"click\");e.dispatchEvent(t)}(n),h(),a(d),p.readyState=p.DONE});!function(){if((l||v&&o)&&e.FileReader){var n=new FileReader;return n.onloadend=function(){var t=l?n.result:n.result.replace(/^data:[^;]*;/,\"data:attachment/file;\");e.open(t,\"_blank\")||(e.location.href=t),t=void 0,p.readyState=p.DONE,h()},n.readAsDataURL(c),void(p.readyState=p.INIT)}d||(d=t().createObjectURL(c)),v?e.location.href=d:e.open(d,\"_blank\")||(e.location.href=d);p.readyState=p.DONE,h(),a(d)}()},f=c.prototype;return\"undefined\"!=typeof navigator&&navigator.msSaveOrOpenBlob?function(e,t,n){return t=t||e.name||\"download\",n||(e=u(e)),navigator.msSaveOrOpenBlob(e,t)}:(f.abort=function(){},f.readyState=f.INIT=0,f.WRITING=1,f.DONE=2,f.error=f.onwritestart=f.onprogress=f.onwrite=f.onabort=f.onerror=f.onwriteend=null,function(e,t,n){return new c(e,t||e.name||\"download\",n)})}}(\"undefined\"!=typeof self&&self||\"undefined\"!=typeof window&&window||this.content);\n/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */void 0!==e&&e.exports?e.exports.saveAs=o:null!==n(7)&&null!==n(8)&&(void 0===(r=function(){return o}.call(t,n,t,e))||(e.exports=r))},function(e,t){e.exports=function(){throw new Error(\"define cannot be used indirect\")}},function(e,t){(function(t){e.exports=t}).call(this,{})},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=n(0);t.default={workcellCreated:function(e){var t=e.workcell,n=e.cellStyle,l=n.fontWeight;t.font=r({},t.font||{},{name:n.fontFamily,color:{argb:(0,o.argb)(n.color)},bold:\"bold\"===l||+l>600})}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=n(0);t.default={workcellCreated:function(e){var t=e.workcell,n=e.cellStyle,l=(0,o.argb)(n.backgroundColor);t.fill=r({},t.fill||{},\"00000000\"===l?{type:\"pattern\",pattern:\"none\"}:{type:\"pattern\",pattern:\"solid\",fgColor:{argb:l}})}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={workcellCreated:function(e){var t=e.workcell,n=e.cell.children[0];n&&[\"INPUT\",\"SELECT\",\"TEXTAREA\"].includes(n.tagName)&&(t.value=n.value)}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};t.default={workcellCreated:function(e){var t=e.workcell,n=e.cellStyle,o=n.verticalAlign,l=n.textAlign;t.alignment=r({},t.alignment||{},{vertical:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",t=[\"top\",\"middle\",\"bottom\"],n=0;n<t.length;n++)if(e.includes(t[n]))return t[n];return{baseline:\"middle\",super:\"top\",sub:\"bottom\"}[e]}(o),horizontal:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",t=[\"right\",\"left\",\"center\",\"justify\"],n=0;n<t.length;n++)if(e.includes(t[n]))return t[n]}(l)})}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={workcellCreated:function(e){var t=e.workcell,n=e.cell.children[0];n&&\"A\"===n.tagName&&(t.value={text:n.innerText,hyperlink:n.href})}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={workcellCreated:function(e){var t=e.worksheet,n=e.colRange,r=(e.cell,e.cellStyle);n.from===n.to&&\"auto\"!==r.width&&(t.getColumn(n.from+1).width=+r.width.split(\"px\")[0]*this.options.widthRatio)}}}]).default});"
  },
  {
    "path": "docs/index.html",
    "content": "<html><head>\n    <meta charset=\"utf-8\">\n    <title></title>\n    <script src=\"js/exceljs.min.js\"></script>\n    <script src=\"js/table2excel.core.js\"></script>\n    <script>\n    function exportTables () {\n      new Table2Excel('table').export()\n    }\n    </script>\n  </head>\n  <body>\n    <button onclick=\"exportTables()\">export</button>\n\n\n\n\n\n\n<h1>Table 1</h1>\n<table border=\"1\">\n  <tbody>\n    <tr>\n      <td colspan=\"2\">1</td>\n      <td rowspan=\"2\"><a href=\"//github.com\">github</a></td>\n      <td>\n        <select>\n          <option>option 1</option>\n          <option>option 2</option>\n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td><input value=\"input value\"></td>\n      <td><textarea>textarea</textarea></td>\n      <td>c</td>\n    </tr>\n  </tbody>\n</table>\n\n<h1>ASCII Table</h1>\n<table class=\"wikitable\" style=\"text-align: center\" border=\"1\">\n<tbody><tr>\n<th rowspan=\"2\"><a href=\"/wiki/Binary_numeral_system\" class=\"mw-redirect\" title=\"Binary numeral system\">Binary</a></th>\n<th rowspan=\"2\"><a href=\"/wiki/Octal\" title=\"Octal\">Oct</a></th>\n<th rowspan=\"2\"><a href=\"/wiki/Decimal\" title=\"Decimal\">Dec</a></th>\n<th rowspan=\"2\"><a href=\"/wiki/Hexadecimal\" title=\"Hexadecimal\">Hex</a></th>\n<th colspan=\"3\">Abbreviation</th>\n<th rowspan=\"2\"><sup id=\"cite_ref-39\" class=\"reference\"><a href=\"#cite_note-39\">[b]</a></sup></th>\n<th rowspan=\"2\"><sup id=\"cite_ref-40\" class=\"reference\"><a href=\"#cite_note-40\">[c]</a></sup></th>\n<th rowspan=\"2\"><sup id=\"cite_ref-41\" class=\"reference\"><a href=\"#cite_note-41\">[d]</a></sup></th>\n<th rowspan=\"2\">Name ('67)</th>\n</tr>\n<tr>\n<th>'63</th>\n<th>'65</th>\n<th>'67</th>\n</tr>\n<tr>\n<td>000 0000</td>\n<td style=\"background:lightblue;\">000</td>\n<td style=\"background:#CFF;\">0</td>\n<td style=\"background:lightblue;\">00</td>\n<td>NULL</td>\n<td colspan=\"2\">NUL</td>\n<td style=\"font-size:large;\">␀</td>\n<td><code><a href=\"/wiki/%5E@\" class=\"mw-redirect\" title=\"^@\">^@</a></code></td>\n<td><code><a href=\"/wiki/%5C0\" class=\"mw-redirect\" title=\"\\0\">\\0</a></code></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Null_character\" title=\"Null character\">Null</a></td>\n</tr>\n<tr>\n<td>000 0001</td>\n<td style=\"background:lightblue;\">001</td>\n<td style=\"background:#CFF;\">1</td>\n<td style=\"background:lightblue;\">01</td>\n<td>SOM</td>\n<td colspan=\"2\">SOH</td>\n<td style=\"font-size:large;\">␁</td>\n<td><code><a href=\"/wiki/%5EA\" class=\"mw-redirect\" title=\"^A\">^A</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Start_of_Heading\" class=\"mw-redirect\" title=\"Start of Heading\">Start of Heading</a></td>\n</tr>\n<tr>\n<td>000 0010</td>\n<td style=\"background:lightblue;\">002</td>\n<td style=\"background:#CFF;\">2</td>\n<td style=\"background:lightblue;\">02</td>\n<td>EOA</td>\n<td colspan=\"2\">STX</td>\n<td style=\"font-size:large;\">␂</td>\n<td><code><a href=\"/wiki/%5EB\" class=\"mw-redirect\" title=\"^B\">^B</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Start_of_Text\" class=\"mw-redirect\" title=\"Start of Text\">Start of Text</a></td>\n</tr>\n<tr>\n<td>000 0011</td>\n<td style=\"background:lightblue;\">003</td>\n<td style=\"background:#CFF;\">3</td>\n<td style=\"background:lightblue;\">03</td>\n<td>EOM</td>\n<td colspan=\"2\">ETX</td>\n<td style=\"font-size:large;\">␃</td>\n<td><code><a href=\"/wiki/%5EC\" class=\"mw-redirect\" title=\"^C\">^C</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/End-of-Text_character\" title=\"End-of-Text character\">End of Text</a></td>\n</tr>\n<tr>\n<td>000 0100</td>\n<td style=\"background:lightblue;\">004</td>\n<td style=\"background:#CFF;\">4</td>\n<td style=\"background:lightblue;\">04</td>\n<td colspan=\"3\">EOT</td>\n<td style=\"font-size:large;\">␄</td>\n<td><code><a href=\"/wiki/%5ED\" class=\"mw-redirect\" title=\"^D\">^D</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/End-of-Transmission_character\" title=\"End-of-Transmission character\">End of Transmission</a></td>\n</tr>\n<tr>\n<td>000 0101</td>\n<td style=\"background:lightblue;\">005</td>\n<td style=\"background:#CFF;\">5</td>\n<td style=\"background:lightblue;\">05</td>\n<td>WRU</td>\n<td colspan=\"2\">ENQ</td>\n<td style=\"font-size:large;\">␅</td>\n<td><code><a href=\"/wiki/%5EE\" class=\"mw-redirect\" title=\"^E\">^E</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Enquiry_character\" title=\"Enquiry character\">Enquiry</a></td>\n</tr>\n<tr>\n<td>000 0110</td>\n<td style=\"background:lightblue;\">006</td>\n<td style=\"background:#CFF;\">6</td>\n<td style=\"background:lightblue;\">06</td>\n<td>RU</td>\n<td colspan=\"2\">ACK</td>\n<td style=\"font-size:large;\">␆</td>\n<td><code><a href=\"/wiki/%5EF\" class=\"mw-redirect\" title=\"^F\">^F</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Acknowledge_character\" class=\"mw-redirect\" title=\"Acknowledge character\">Acknowledgement</a></td>\n</tr>\n<tr>\n<td>000 0111</td>\n<td style=\"background:lightblue;\">007</td>\n<td style=\"background:#CFF;\">7</td>\n<td style=\"background:lightblue;\">07</td>\n<td>BELL</td>\n<td colspan=\"2\">BEL</td>\n<td style=\"font-size:large;\">␇</td>\n<td><code><a href=\"/wiki/%5EG\" class=\"mw-redirect\" title=\"^G\">^G</a></code></td>\n<td><code><a href=\"/wiki/%5Ca\" class=\"mw-redirect\" title=\"\\a\">\\a</a></code></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Bell_character\" title=\"Bell character\">Bell</a></td>\n</tr>\n<tr>\n<td>000 1000</td>\n<td style=\"background:lightblue;\">010</td>\n<td style=\"background:#CFF;\">8</td>\n<td style=\"background:lightblue;\">08</td>\n<td>FE0</td>\n<td colspan=\"2\">BS</td>\n<td style=\"font-size:large;\">␈</td>\n<td><code><a href=\"/wiki/%5EH\" class=\"mw-redirect\" title=\"^H\">^H</a></code></td>\n<td><code><a href=\"/wiki/Backspace\" title=\"Backspace\">\\b</a></code></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Backspace\" title=\"Backspace\">Backspace</a><sup id=\"cite_ref-42\" class=\"reference\"><a href=\"#cite_note-42\">[e]</a></sup><sup id=\"cite_ref-bsp_del_mismatch_43-0\" class=\"reference\"><a href=\"#cite_note-bsp_del_mismatch-43\">[f]</a></sup></td>\n</tr>\n<tr>\n<td>000 1001</td>\n<td style=\"background:lightblue;\">011</td>\n<td style=\"background:#CFF;\">9</td>\n<td style=\"background:lightblue;\">09</td>\n<td>HT/SK</td>\n<td colspan=\"2\">HT</td>\n<td style=\"font-size:large;\">␉</td>\n<td><code><a href=\"/wiki/%5EI\" class=\"mw-redirect\" title=\"^I\">^I</a></code></td>\n<td><code><a href=\"/wiki/%5Ct\" class=\"mw-redirect\" title=\"\\t\">\\t</a></code></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Horizontal_Tab\" class=\"mw-redirect\" title=\"Horizontal Tab\">Horizontal Tab</a><sup id=\"cite_ref-44\" class=\"reference\"><a href=\"#cite_note-44\">[g]</a></sup></td>\n</tr>\n<tr>\n<td>000 1010</td>\n<td style=\"background:lightblue;\">012</td>\n<td style=\"background:#CFF;\">10</td>\n<td style=\"background:lightblue;\">0A</td>\n<td colspan=\"3\">LF</td>\n<td style=\"font-size:large;\">␊</td>\n<td><code><a href=\"/wiki/%5EJ\" class=\"mw-redirect\" title=\"^J\">^J</a></code></td>\n<td><code><a href=\"/wiki/%5Cn\" class=\"mw-redirect\" title=\"\\n\">\\n</a></code></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Line_Feed\" class=\"mw-redirect\" title=\"Line Feed\">Line Feed</a></td>\n</tr>\n<tr>\n<td>000 1011</td>\n<td style=\"background:lightblue;\">013</td>\n<td style=\"background:#CFF;\">11</td>\n<td style=\"background:lightblue;\">0B</td>\n<td>VTAB</td>\n<td colspan=\"2\">VT</td>\n<td style=\"font-size:large;\">␋</td>\n<td><code><a href=\"/wiki/%5EK\" class=\"mw-redirect\" title=\"^K\">^K</a></code></td>\n<td><code><a href=\"/wiki/%5Cv\" class=\"mw-redirect\" title=\"\\v\">\\v</a></code></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Vertical_Tab\" class=\"mw-redirect\" title=\"Vertical Tab\">Vertical Tab</a></td>\n</tr>\n<tr>\n<td>000 1100</td>\n<td style=\"background:lightblue;\">014</td>\n<td style=\"background:#CFF;\">12</td>\n<td style=\"background:lightblue;\">0C</td>\n<td colspan=\"3\">FF</td>\n<td style=\"font-size:large;\">␌</td>\n<td><code><a href=\"/wiki/%5EL\" class=\"mw-redirect\" title=\"^L\">^L</a></code></td>\n<td><code><a href=\"/wiki/%5Cf\" class=\"mw-redirect\" title=\"\\f\">\\f</a></code></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Form_Feed\" class=\"mw-redirect\" title=\"Form Feed\">Form Feed</a></td>\n</tr>\n<tr>\n<td>000 1101</td>\n<td style=\"background:lightblue;\">015</td>\n<td style=\"background:#CFF;\">13</td>\n<td style=\"background:lightblue;\">0D</td>\n<td colspan=\"3\">CR</td>\n<td style=\"font-size:large;\">␍</td>\n<td><code><a href=\"/wiki/%5EM\" class=\"mw-redirect\" title=\"^M\">^M</a></code></td>\n<td><code><a href=\"/wiki/%5Cr\" class=\"mw-redirect\" title=\"\\r\">\\r</a></code></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Carriage_Return\" class=\"mw-redirect\" title=\"Carriage Return\">Carriage Return</a><sup id=\"cite_ref-45\" class=\"reference\"><a href=\"#cite_note-45\">[h]</a></sup></td>\n</tr>\n<tr>\n<td>000 1110</td>\n<td style=\"background:lightblue;\">016</td>\n<td style=\"background:#CFF;\">14</td>\n<td style=\"background:lightblue;\">0E</td>\n<td colspan=\"3\">SO</td>\n<td style=\"font-size:large;\">␎</td>\n<td><code><a href=\"/wiki/%5EN\" class=\"mw-redirect\" title=\"^N\">^N</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Shift_Out\" class=\"mw-redirect\" title=\"Shift Out\">Shift Out</a></td>\n</tr>\n<tr>\n<td>000 1111</td>\n<td style=\"background:lightblue;\">017</td>\n<td style=\"background:#CFF;\">15</td>\n<td style=\"background:lightblue;\">0F</td>\n<td colspan=\"3\">SI</td>\n<td style=\"font-size:large;\">␏</td>\n<td><code><a href=\"/wiki/%5EO\" class=\"mw-redirect\" title=\"^O\">^O</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Shift_In\" class=\"mw-redirect\" title=\"Shift In\">Shift In</a></td>\n</tr>\n<tr>\n<td>001 0000</td>\n<td style=\"background:lightblue;\">020</td>\n<td style=\"background:#CFF;\">16</td>\n<td style=\"background:lightblue;\">10</td>\n<td>DC0</td>\n<td colspan=\"2\">DLE</td>\n<td style=\"font-size:large;\">␐</td>\n<td><code><a href=\"/wiki/%5EP\" class=\"mw-redirect\" title=\"^P\">^P</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Data_Link_Escape\" class=\"mw-redirect\" title=\"Data Link Escape\">Data Link Escape</a></td>\n</tr>\n<tr>\n<td>001 0001</td>\n<td style=\"background:lightblue;\">021</td>\n<td style=\"background:#CFF;\">17</td>\n<td style=\"background:lightblue;\">11</td>\n<td colspan=\"3\">DC1</td>\n<td style=\"font-size:large;\">␑</td>\n<td><code><a href=\"/wiki/%5EQ\" class=\"mw-redirect\" title=\"^Q\">^Q</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Device_Control_1\" class=\"mw-redirect\" title=\"Device Control 1\">Device Control 1</a> (often <a href=\"/wiki/XON\" class=\"mw-redirect\" title=\"XON\">XON</a>)</td>\n</tr>\n<tr>\n<td>001 0010</td>\n<td style=\"background:lightblue;\">022</td>\n<td style=\"background:#CFF;\">18</td>\n<td style=\"background:lightblue;\">12</td>\n<td colspan=\"3\">DC2</td>\n<td style=\"font-size:large;\">␒</td>\n<td><code><a href=\"/wiki/%5ER\" class=\"mw-redirect\" title=\"^R\">^R</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Device_Control_2\" class=\"mw-redirect\" title=\"Device Control 2\">Device Control 2</a></td>\n</tr>\n<tr>\n<td>001 0011</td>\n<td style=\"background:lightblue;\">023</td>\n<td style=\"background:#CFF;\">19</td>\n<td style=\"background:lightblue;\">13</td>\n<td colspan=\"3\">DC3</td>\n<td style=\"font-size:large;\">␓</td>\n<td><code><a href=\"/wiki/%5ES\" class=\"mw-redirect\" title=\"^S\">^S</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Device_Control_3\" class=\"mw-redirect\" title=\"Device Control 3\">Device Control 3</a> (often <a href=\"/wiki/XOFF\" class=\"mw-redirect\" title=\"XOFF\">XOFF</a>)</td>\n</tr>\n<tr>\n<td>001 0100</td>\n<td style=\"background:lightblue;\">024</td>\n<td style=\"background:#CFF;\">20</td>\n<td style=\"background:lightblue;\">14</td>\n<td colspan=\"3\">DC4</td>\n<td style=\"font-size:large;\">␔</td>\n<td><code><a href=\"/wiki/%5ET\" class=\"mw-redirect\" title=\"^T\">^T</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Device_Control_4\" class=\"mw-redirect\" title=\"Device Control 4\">Device Control 4</a></td>\n</tr>\n<tr>\n<td>001 0101</td>\n<td style=\"background:lightblue;\">025</td>\n<td style=\"background:#CFF;\">21</td>\n<td style=\"background:lightblue;\">15</td>\n<td>ERR</td>\n<td colspan=\"2\">NAK</td>\n<td style=\"font-size:large;\">␕</td>\n<td><code><a href=\"/wiki/%5EU\" class=\"mw-redirect\" title=\"^U\">^U</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Negative-acknowledge_character\" class=\"mw-redirect\" title=\"Negative-acknowledge character\">Negative Acknowledgement</a></td>\n</tr>\n<tr>\n<td>001 0110</td>\n<td style=\"background:lightblue;\">026</td>\n<td style=\"background:#CFF;\">22</td>\n<td style=\"background:lightblue;\">16</td>\n<td>SYNC</td>\n<td colspan=\"2\">SYN</td>\n<td style=\"font-size:large;\">␖</td>\n<td><code><a href=\"/wiki/%5EV\" class=\"mw-redirect\" title=\"^V\">^V</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Synchronous_Idle\" title=\"Synchronous Idle\">Synchronous Idle</a></td>\n</tr>\n<tr>\n<td>001 0111</td>\n<td style=\"background:lightblue;\">027</td>\n<td style=\"background:#CFF;\">23</td>\n<td style=\"background:lightblue;\">17</td>\n<td>LEM</td>\n<td colspan=\"2\">ETB</td>\n<td style=\"font-size:large;\">␗</td>\n<td><code><a href=\"/wiki/%5EW\" class=\"mw-redirect\" title=\"^W\">^W</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/End-of-Transmission-Block_character\" title=\"End-of-Transmission-Block character\">End of Transmission Block</a></td>\n</tr>\n<tr>\n<td>001 1000</td>\n<td style=\"background:lightblue;\">030</td>\n<td style=\"background:#CFF;\">24</td>\n<td style=\"background:lightblue;\">18</td>\n<td>S0</td>\n<td colspan=\"2\">CAN</td>\n<td style=\"font-size:large;\">␘</td>\n<td><code><a href=\"/wiki/%5EX\" class=\"mw-redirect\" title=\"^X\">^X</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Cancel_character\" title=\"Cancel character\">Cancel</a></td>\n</tr>\n<tr>\n<td>001 1001</td>\n<td style=\"background:lightblue;\">031</td>\n<td style=\"background:#CFF;\">25</td>\n<td style=\"background:lightblue;\">19</td>\n<td>S1</td>\n<td colspan=\"2\">EM</td>\n<td style=\"font-size:large;\">␙</td>\n<td><code><a href=\"/wiki/%5EY\" class=\"mw-redirect\" title=\"^Y\">^Y</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/End_of_Medium\" class=\"mw-redirect\" title=\"End of Medium\">End of Medium</a></td>\n</tr>\n<tr>\n<td>001 1010</td>\n<td style=\"background:lightblue;\">032</td>\n<td style=\"background:#CFF;\">26</td>\n<td style=\"background:lightblue;\">1A</td>\n<td>S2</td>\n<td>SS</td>\n<td>SUB</td>\n<td style=\"font-size:large;\">␚</td>\n<td><code><a href=\"/wiki/%5EZ\" class=\"mw-redirect\" title=\"^Z\">^Z</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Substitute_character\" title=\"Substitute character\">Substitute</a></td>\n</tr>\n<tr>\n<td>001 1011</td>\n<td style=\"background:lightblue;\">033</td>\n<td style=\"background:#CFF;\">27</td>\n<td style=\"background:lightblue;\">1B</td>\n<td>S3</td>\n<td colspan=\"2\">ESC</td>\n<td style=\"font-size:large;\">␛</td>\n<td><code>^[</code></td>\n<td><code><a href=\"/wiki/%5Ce\" class=\"mw-redirect\" title=\"\\e\">\\e</a></code><sup id=\"cite_ref-46\" class=\"reference\"><a href=\"#cite_note-46\">[i]</a></sup></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Escape_character\" title=\"Escape character\">Escape</a><sup id=\"cite_ref-47\" class=\"reference\"><a href=\"#cite_note-47\">[j]</a></sup></td>\n</tr>\n<tr>\n<td>001 1100</td>\n<td style=\"background:lightblue;\">034</td>\n<td style=\"background:#CFF;\">28</td>\n<td style=\"background:lightblue;\">1C</td>\n<td>S4</td>\n<td colspan=\"2\">FS</td>\n<td style=\"font-size:large;\">␜</td>\n<td><code><a href=\"/wiki/%5E%5C\" class=\"mw-redirect\" title=\"^\\\">^\\</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/File_Separator\" class=\"mw-redirect\" title=\"File Separator\">File Separator</a></td>\n</tr>\n<tr>\n<td>001 1101</td>\n<td style=\"background:lightblue;\">035</td>\n<td style=\"background:#CFF;\">29</td>\n<td style=\"background:lightblue;\">1D</td>\n<td>S5</td>\n<td colspan=\"2\">GS</td>\n<td style=\"font-size:large;\">␝</td>\n<td><code>^]</code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Group_Separator\" class=\"mw-redirect\" title=\"Group Separator\">Group Separator</a></td>\n</tr>\n<tr>\n<td>001 1110</td>\n<td style=\"background:lightblue;\">036</td>\n<td style=\"background:#CFF;\">30</td>\n<td style=\"background:lightblue;\">1E</td>\n<td>S6</td>\n<td colspan=\"2\">RS</td>\n<td style=\"font-size:large;\">␞</td>\n<td><code>^^</code><sup id=\"cite_ref-48\" class=\"reference\"><a href=\"#cite_note-48\">[k]</a></sup></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Record_Separator\" class=\"mw-redirect\" title=\"Record Separator\">Record Separator</a></td>\n</tr>\n<tr>\n<td>001 1111</td>\n<td style=\"background:lightblue;\">037</td>\n<td style=\"background:#CFF;\">31</td>\n<td style=\"background:lightblue;\">1F</td>\n<td>S7</td>\n<td colspan=\"2\">US</td>\n<td style=\"font-size:large;\">␟</td>\n<td><code>^_</code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Unit_Separator\" class=\"mw-redirect\" title=\"Unit Separator\">Unit Separator</a></td>\n</tr>\n<tr>\n<td>111 1111</td>\n<td style=\"background:lightblue;\">177</td>\n<td style=\"background:#CFF;\">127</td>\n<td style=\"background:lightblue;\">7F</td>\n<td colspan=\"3\">DEL</td>\n<td style=\"font-size:large;\">␡</td>\n<td><code><a href=\"/wiki/%5E%3F\" class=\"mw-redirect\" title=\"^?\">^?</a></code></td>\n<td></td>\n<td style=\"text-align:left;\"><a href=\"/wiki/Delete_character\" title=\"Delete character\">Delete</a><sup id=\"cite_ref-49\" class=\"reference\"><a href=\"#cite_note-49\">[l]</a></sup><sup id=\"cite_ref-bsp_del_mismatch_43-1\" class=\"reference\"><a href=\"#cite_note-bsp_del_mismatch-43\">[f]</a></sup></td>\n</tr>\n</tbody></table>\n\n<h1>Table 3</h1>\n<table border=\"1\">\n<tbody><tr align=\"center\" valign=\"bottom\" style=\"margin:auto\">\n<td width=\"1.2%\"><b>族→</b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/%E9%B9%BC%E9%87%91%E5%B1%AC\" class=\"mw-redirect\" title=\"碱金属\">1</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/%E9%B9%BC%E5%9C%9F%E9%87%91%E5%B1%AC\" class=\"mw-redirect\" title=\"碱土金属\">2</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/3%E6%97%8F%E5%85%83%E7%B4%A0\" title=\"3族元素\">3</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/4%E6%97%8F%E5%85%83%E7%B4%A0\" title=\"4族元素\">4</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/5%E6%97%8F%E5%85%83%E7%B4%A0\" title=\"5族元素\">5</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/6%E6%97%8F%E5%85%83%E7%B4%A0\" title=\"6族元素\">6</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/7%E6%97%8F%E5%85%83%E7%B4%A0\" title=\"7族元素\">7</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/8%E6%97%8F%E5%85%83%E7%B4%A0\" title=\"8族元素\">8</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/9%E6%97%8F%E5%85%83%E7%B4%A0\" title=\"9族元素\">9</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/10%E6%97%8F%E5%85%83%E7%B4%A0\" title=\"10族元素\">10</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/11%E6%97%8F%E5%85%83%E7%B4%A0\" title=\"11族元素\">11</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/12%E6%97%8F%E5%85%83%E7%B4%A0\" title=\"12族元素\">12</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/%E7%A1%BC%E6%97%8F%E5%85%83%E7%B4%A0\" title=\"硼族元素\">13</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/%E7%A2%B3%E6%97%8F%E5%85%83%E7%B4%A0\" title=\"碳族元素\">14</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/%E6%B0%AE%E6%97%8F%E5%85%83%E7%B4%A0\" title=\"氮族元素\">15</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/%E6%B0%A7%E6%97%8F%E5%85%83%E7%B4%A0\" title=\"氧族元素\">16</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/%E9%B9%B5%E7%B4%A0\" class=\"mw-redirect\" title=\"卤素\">17</a></b></td>\n<td width=\"5.3%\"><b><a href=\"/wiki/%E7%A8%80%E6%9C%89%E6%B0%94%E4%BD%93\" title=\"稀有气体\">18</a></b></td>\n<td rowspan=\"3\" width=\"1.6%\"><b>电子层</b></td>\n<td rowspan=\"3\" width=\"1.6%\"><b>0族电子数</b></td>\n</tr>\n<tr align=\"center\">\n<td colspan=\"19\">\n<hr></td>\n</tr>\n<tr align=\"center\" valign=\"bottom\">\n<td><b>周期↓</b></td>\n<td><b>I</b>A</td>\n<td colspan=\"16\"></td>\n<td><b>VIII</b>A<br>\n（0）</td>\n</tr>\n<tr align=\"center\">\n<td><a href=\"/wiki/%E7%AC%AC1%E5%91%A8%E6%9C%9F%E5%85%83%E7%B4%A0\" title=\"第1周期元素\">1</a></td>\n<td bgcolor=\"#A0FFA0\"><span style=\"color:green;\"><b>1</b></span><br>\nH<br>\n<a href=\"/wiki/%E6%B0%AB\" class=\"mw-redirect\" title=\"氢\">氢</a><br>\n1.008</td>\n<td valign=\"bottom\"><b>II</b> A</td>\n<td colspan=\"10\"></td>\n<td valign=\"bottom\"><b>III</b> A</td>\n<td valign=\"bottom\"><b>IV</b> A</td>\n<td valign=\"bottom\"><b>V</b> A</td>\n<td valign=\"bottom\"><b>VI</b> A</td>\n<td valign=\"bottom\"><b>VII</b> A</td>\n<td bgcolor=\"#C0FFFF\"><span style=\"color:green;\"><b>2</b></span><br>\nHe<br>\n<a href=\"/wiki/%E6%B0%A6\" title=\"氦\">氦</a><br>\n4.003</td>\n<td valign=\"bottom\" style=\"font-size:50%;line-height:1.2\"><br>\n<br>\n<br>\n<br>\n<br>\nK</td>\n<td valign=\"bottom\" style=\"font-size:50%;line-height:1.2\"><br>\n<br>\n<br>\n<br>\n<br>\n2</td>\n</tr>\n<tr align=\"center\">\n<td><a href=\"/wiki/%E7%AC%AC2%E5%91%A8%E6%9C%9F%E5%85%83%E7%B4%A0\" title=\"第2周期元素\">2</a></td>\n<td bgcolor=\"#FF6666\"><b>3</b><br>\nLi<br>\n<a href=\"/wiki/%E9%8B%B0\" class=\"mw-redirect\" title=\"锂\">锂</a><br>\n6.941</td>\n<td bgcolor=\"#FFDEAD\"><b>4</b><br>\nBe<br>\n<a href=\"/wiki/%E9%88%B9\" class=\"mw-redirect\" title=\"铍\">铍</a><br>\n9.012</td>\n<td colspan=\"10\"></td>\n<td bgcolor=\"#CCCC99\"><b>5</b><br>\nB<br>\n<a href=\"/wiki/%E7%A1%BC\" title=\"硼\">硼</a><br>\n10.81</td>\n<td bgcolor=\"#A0FFA0\"><b>6</b><br>\nC<br>\n<a href=\"/wiki/%E7%A2%B3\" title=\"碳\">碳</a><br>\n12.01</td>\n<td bgcolor=\"#A0FFA0\"><span style=\"color:green;\"><b>7</b></span><br>\nN<br>\n<a href=\"/wiki/%E6%B0%AE\" title=\"氮\">氮</a><br>\n14.01</td>\n<td bgcolor=\"#A0FFA0\"><span style=\"color:green;\"><b>8</b></span><br>\nO<br>\n<a href=\"/wiki/%E6%B0%A7\" title=\"氧\">氧</a><br>\n16.00</td>\n<td bgcolor=\"#FFFF99\"><span style=\"color:green;\"><b>9</b></span><br>\nF<br>\n<a href=\"/wiki/%E6%B0%9F\" title=\"氟\">氟</a><br>\n19.00</td>\n<td bgcolor=\"#C0FFFF\"><span style=\"color:green;\"><b>10</b></span><br>\nNe<br>\n<a href=\"/wiki/%E6%B0%96\" title=\"氖\">氖</a><br>\n20.18</td>\n<td valign=\"bottom\" style=\"font-size:50%;line-height:1.2\"><br>\n<br>\n<br>\n<br>\nL<br>\nK</td>\n<td valign=\"bottom\" style=\"font-size:50%;line-height:1.2\"><br>\n<br>\n<br>\n<br>\n8<br>\n2</td>\n</tr>\n<tr align=\"center\">\n<td><a href=\"/wiki/%E7%AC%AC3%E5%91%A8%E6%9C%9F%E5%85%83%E7%B4%A0\" title=\"第3周期元素\">3</a></td>\n<td bgcolor=\"#FF6666\"><b>11</b><br>\nNa<br>\n<a href=\"/wiki/%E9%88%89\" class=\"mw-redirect\" title=\"钠\">钠</a><br>\n22.99</td>\n<td bgcolor=\"#FFDEAD\"><b>12</b><br>\nMg<br>\n<a href=\"/wiki/%E9%8E%82\" class=\"mw-redirect\" title=\"镁\">镁</a><br>\n24.31</td>\n<td valign=\"bottom\"><b>III</b> B</td>\n<td valign=\"bottom\"><b>IV</b> B</td>\n<td valign=\"bottom\"><b>V</b> B</td>\n<td valign=\"bottom\"><b>VI</b> B</td>\n<td valign=\"bottom\"><b>VII</b> B</td>\n<td valign=\"bottom\" colspan=\"3\"><b>VIII</b> B<br>\n<span class=\"mwe-math-element\"><span class=\"mwe-math-mathml-inline mwe-math-mathml-a11y\" style=\"display: none;\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n  <semantics>\n    <mrow class=\"MJX-TeXAtom-ORD\">\n      <mstyle displaystyle=\"true\" scriptlevel=\"0\">\n        <mrow class=\"MJX-TeXAtom-OP\">\n          <mover>\n            <mrow>\n              <mspace width=\"2em\"></mspace>\n              <mspace width=\"2em\"></mspace>\n              <mspace width=\"2em\"></mspace>\n            </mrow>\n            <mo accent=\"false\">⏞<!-- ⏞ --></mo>\n          </mover>\n        </mrow>\n      </mstyle>\n    </mrow>\n    <annotation encoding=\"application/x-tex\">{\\displaystyle \\overbrace {\\qquad \\qquad \\qquad } }</annotation>\n  </semantics>\n</math></span><img src=\"https://wikimedia.org/api/rest_v1/media/math/render/svg/220427fd36f89da1fe868ced1f293fd5a1a90267\" class=\"mwe-math-fallback-image-inline\" aria-hidden=\"true\" style=\"vertical-align: -0.171ex; margin-right: -0.02ex; width:13.955ex; height:1.843ex;\" alt=\"\\overbrace {\\qquad \\qquad \\qquad } \"></span></td>\n<td valign=\"bottom\"><b>I</b> B</td>\n<td valign=\"bottom\"><b>II</b> B</td>\n<td bgcolor=\"#CCCCCC\"><b>13</b><br>\nAl<br>\n<a href=\"/wiki/%E9%8B%81\" class=\"mw-redirect\" title=\"铝\">铝</a><br>\n26.98</td>\n<td bgcolor=\"#CCCC99\"><b>14</b><br>\nSi<br>\n<a href=\"/wiki/%E7%A1%85\" title=\"硅\">硅</a><br>\n28.09</td>\n<td bgcolor=\"#A0FFA0\"><b>15</b><br>\nP<br>\n<a href=\"/wiki/%E7%A3%B7\" title=\"磷\">磷</a><br>\n30.97</td>\n<td bgcolor=\"#A0FFA0\"><b>16</b><br>\nS<br>\n<a href=\"/wiki/%E7%A1%AB\" title=\"硫\">硫</a><br>\n32.07</td>\n<td bgcolor=\"#FFFF99\"><span style=\"color:green;\"><b>17</b></span><br>\nCl<br>\n<a href=\"/wiki/%E6%B0%AF\" title=\"氯\">氯</a><br>\n35.45</td>\n<td bgcolor=\"#C0FFFF\"><span style=\"color:green;\"><b>18</b></span><br>\nAr<br>\n<a href=\"/wiki/%E6%B0%AC\" class=\"mw-redirect\" title=\"氩\">氩</a><br>\n39.95</td>\n<td valign=\"bottom\" style=\"font-size:50%;line-height:1.2\"><br>\n<br>\n<br>\nM<br>\nL<br>\nK</td>\n<td valign=\"bottom\" style=\"font-size:50%;line-height:1.2\"><br>\n<br>\n<br>\n8<br>\n8<br>\n2</td>\n</tr>\n<tr align=\"center\">\n<td><a href=\"/wiki/%E7%AC%AC4%E5%91%A8%E6%9C%9F%E5%85%83%E7%B4%A0\" title=\"第4周期元素\">4</a></td>\n<td bgcolor=\"#FF6666\"><b>19</b><br>\nK<br>\n<a href=\"/wiki/%E9%89%80\" class=\"mw-redirect\" title=\"钾\">钾</a><br>\n39.10</td>\n<td bgcolor=\"#FFDEAD\"><b>20</b><br>\nCa<br>\n<a href=\"/wiki/%E9%88%A3\" class=\"mw-redirect\" title=\"钙\">钙</a><br>\n40.08</td>\n<td bgcolor=\"#FFC0C0\"><b>21</b><br>\nSc<br>\n<a href=\"/wiki/%E9%88%A7\" class=\"mw-redirect\" title=\"钪\">钪</a><br>\n44.96</td>\n<td bgcolor=\"#FFC0C0\"><b>22</b><br>\nTi<br>\n<a href=\"/wiki/%E9%88%A6\" class=\"mw-redirect\" title=\"钛\">钛</a><br>\n47.88</td>\n<td bgcolor=\"#FFC0C0\"><b>23</b><br>\nV<br>\n<a href=\"/wiki/%E9%87%A9\" class=\"mw-redirect\" title=\"钒\">钒</a><br>\n50.94</td>\n<td bgcolor=\"#FFC0C0\"><b>24</b><br>\nCr<br>\n<a href=\"/wiki/%E9%89%BB\" class=\"mw-redirect\" title=\"铬\">铬</a><br>\n52.00</td>\n<td bgcolor=\"#FFC0C0\"><b>25</b><br>\nMn<br>\n<a href=\"/wiki/%E9%8C%B3\" class=\"mw-redirect\" title=\"锰\">锰</a><br>\n54.94</td>\n<td bgcolor=\"#FFC0C0\"><b>26</b><br>\nFe<br>\n<a href=\"/wiki/%E9%90%B5\" class=\"mw-redirect\" title=\"铁\">铁</a><br>\n55.85</td>\n<td bgcolor=\"#FFC0C0\"><b>27</b><br>\nCo<br>\n<a href=\"/wiki/%E9%88%B7\" class=\"mw-redirect\" title=\"钴\">钴</a><br>\n58.93</td>\n<td bgcolor=\"#FFC0C0\"><b>28</b><br>\nNi<br>\n<a href=\"/wiki/%E9%8E%B3\" class=\"mw-redirect\" title=\"镍\">镍</a><br>\n58.69</td>\n<td bgcolor=\"#FFC0C0\"><b>29</b><br>\nCu<br>\n<a href=\"/wiki/%E9%8A%85\" class=\"mw-redirect\" title=\"铜\">铜</a><br>\n63.55</td>\n<td bgcolor=\"#FFC0C0\"><b>30</b><br>\nZn<br>\n<a href=\"/wiki/%E9%8B%85\" class=\"mw-redirect\" title=\"锌\">锌</a><br>\n65.39</td>\n<td bgcolor=\"#CCCCCC\"><b>31</b><br>\nGa<br>\n<a href=\"/wiki/%E9%8E%B5\" class=\"mw-redirect\" title=\"镓\">镓</a><br>\n69.72</td>\n<td bgcolor=\"#CCCC99\"><b>32</b><br>\nGe<br>\n<a href=\"/wiki/%E9%8D%BA\" class=\"mw-redirect\" title=\"锗\">锗</a><br>\n72.59</td>\n<td bgcolor=\"#CCCC99\"><b>33</b><br>\nAs<br>\n<a href=\"/wiki/%E7%A0%B7\" title=\"砷\">砷</a><br>\n74.92</td>\n<td bgcolor=\"#A0FFA0\"><b>34</b><br>\nSe<br>\n<a href=\"/wiki/%E7%A1%92\" title=\"硒\">硒</a><br>\n78.96</td>\n<td bgcolor=\"#FFFF99\"><span style=\"color:blue;\"><b>35</b></span><br>\nBr<br>\n<a href=\"/wiki/%E6%BA%B4\" title=\"溴\">溴</a><br>\n79.90</td>\n<td bgcolor=\"#C0FFFF\"><span style=\"color:green;\"><b>36</b></span><br>\nKr<br>\n<a href=\"/wiki/%E6%B0%AA\" title=\"氪\">氪</a><br>\n83.80</td>\n<td valign=\"bottom\" style=\"font-size:50%;line-height:1.2\"><br>\n<br>\nN<br>\nM<br>\nL<br>\nK</td>\n<td valign=\"bottom\" style=\"font-size:50%;line-height:1.2\"><br>\n<br>\n8<br>\n18<br>\n8<br>\n2</td>\n</tr>\n<tr align=\"center\">\n<td><a href=\"/wiki/%E7%AC%AC5%E5%91%A8%E6%9C%9F%E5%85%83%E7%B4%A0\" title=\"第5周期元素\">5</a></td>\n<td bgcolor=\"#FF6666\"><b>37</b><br>\nRb<br>\n<a href=\"/wiki/%E9%8A%A3\" class=\"mw-redirect\" title=\"铷\">铷</a><br>\n85.47</td>\n<td bgcolor=\"#FFDEAD\"><b>38</b><br>\nSr<br>\n<a href=\"/wiki/%E9%8D%B6\" class=\"mw-redirect\" title=\"锶\">锶</a><br>\n87.62</td>\n<td bgcolor=\"#FFC0C0\"><b>39</b><br>\nY<br>\n<a href=\"/wiki/%E9%87%94\" class=\"mw-redirect\" title=\"钇\">钇</a><br>\n88.91</td>\n<td bgcolor=\"#FFC0C0\"><b>40</b><br>\nZr<br>\n<a href=\"/wiki/%E9%8B%AF\" class=\"mw-redirect\" title=\"锆\">锆</a><br>\n91.22</td>\n<td bgcolor=\"#FFC0C0\"><b>41</b><br>\nNb<br>\n<a href=\"/wiki/%E9%88%AE\" class=\"mw-redirect\" title=\"铌\">铌</a><br>\n92.91</td>\n<td bgcolor=\"#FFC0C0\"><b>42</b><br>\nMo<br>\n<a href=\"/wiki/%E9%89%AC\" class=\"mw-redirect\" title=\"钼\">钼</a><br>\n95.94</td>\n<td bgcolor=\"#FFC0C0\"><b>43</b><br>\nTc<br>\n<a href=\"/wiki/%E9%8E%9D\" class=\"mw-redirect\" title=\"锝\">锝</a><br>\n(97.91)</td>\n<td bgcolor=\"#FFC0C0\"><b>44</b><br>\nRu<br>\n<a href=\"/wiki/%E9%87%95\" class=\"mw-redirect\" title=\"钌\">钌</a><br>\n101.1</td>\n<td bgcolor=\"#FFC0C0\"><b>45</b><br>\nRh<br>\n<a href=\"/wiki/%E9%8A%A0\" class=\"mw-redirect\" title=\"铑\">铑</a><br>\n102.9</td>\n<td bgcolor=\"#FFC0C0\"><b>46</b><br>\nPd<br>\n<a href=\"/wiki/%E9%88%80\" class=\"mw-redirect\" title=\"钯\">钯</a><br>\n106.4</td>\n<td bgcolor=\"#FFC0C0\"><b>47</b><br>\nAg<br>\n<a href=\"/wiki/%E9%8A%80\" title=\"银\">银</a><br>\n107.9</td>\n<td bgcolor=\"#FFC0C0\"><b>48</b><br>\nCd<br>\n<a href=\"/wiki/%E9%8E%98\" class=\"mw-redirect\" title=\"镉\">镉</a><br>\n112.4</td>\n<td bgcolor=\"#CCCCCC\"><b>49</b><br>\nIn<br>\n<a href=\"/wiki/%E9%8A%A6\" class=\"mw-redirect\" title=\"铟\">铟</a><br>\n114.8</td>\n<td bgcolor=\"#CCCCCC\"><b>50</b><br>\nSn<br>\n<a href=\"/wiki/%E9%8C%AB\" class=\"mw-redirect\" title=\"锡\">锡</a><br>\n118.7</td>\n<td bgcolor=\"#CCCC99\"><b>51</b><br>\nSb<br>\n<a href=\"/wiki/%E9%8A%BB\" class=\"mw-redirect\" title=\"锑\">锑</a><br>\n121.8</td>\n<td bgcolor=\"#CCCC99\"><b>52</b><br>\nTe<br>\n<a href=\"/wiki/%E7%A2%B2\" title=\"碲\">碲</a><br>\n127.6</td>\n<td bgcolor=\"#FFFF99\"><b>53</b><br>\nI<br>\n<a href=\"/wiki/%E7%A2%98\" title=\"碘\">碘</a><br>\n126.9</td>\n<td bgcolor=\"#C0FFFF\"><span style=\"color:green;\"><b>54</b></span><br>\nXe<br>\n<a href=\"/wiki/%E6%B0%99\" title=\"氙\">氙</a><br>\n131.3</td>\n<td valign=\"bottom\" style=\"font-size:50%;line-height:1.2\"><br>\nO<br>\nN<br>\nM<br>\nL<br>\nK</td>\n<td valign=\"bottom\" style=\"font-size:50%;line-height:1.2\"><br>\n8<br>\n18<br>\n18<br>\n8<br>\n2</td>\n</tr>\n<tr align=\"center\">\n<td><a href=\"/wiki/%E7%AC%AC6%E5%91%A8%E6%9C%9F%E5%85%83%E7%B4%A0\" title=\"第6周期元素\">6</a></td>\n<td bgcolor=\"#FF6666\"><b>55</b><br>\nCs<br>\n<a href=\"/wiki/%E9%8A%AB\" class=\"mw-redirect\" title=\"铯\">铯</a><br>\n132.9</td>\n<td bgcolor=\"#FFDEAD\"><b>56</b><br>\nBa<br>\n<a href=\"/wiki/%E9%8B%87\" class=\"mw-redirect\" title=\"钡\">钡</a><br>\n137.3</td>\n<td bgcolor=\"#FFBFFF\"><b>57</b>-<br>\n<b>71</b><br>\n<a href=\"/wiki/%E9%91%AD%E7%B3%BB%E5%85%83%E7%B4%A0\" class=\"mw-redirect\" title=\"镧系元素\">镧系<br>\n元素</a></td>\n<td bgcolor=\"#FFC0C0\"><b>72</b><br>\nHf<br>\n<a href=\"/wiki/%E9%89%BF\" class=\"mw-redirect\" title=\"铪\">铪</a><br>\n178.5</td>\n<td bgcolor=\"#FFC0C0\"><b>73</b><br>\nTa<br>\n<a href=\"/wiki/%E9%89%AD\" class=\"mw-redirect\" title=\"钽\">钽</a><br>\n180.9</td>\n<td bgcolor=\"#FFC0C0\"><b>74</b><br>\nW<br>\n<a href=\"/wiki/%E9%8E%A2\" class=\"mw-redirect\" title=\"钨\">钨</a><br>\n183.9</td>\n<td bgcolor=\"#FFC0C0\"><b>75</b><br>\nRe<br>\n<a href=\"/wiki/%E9%8C%B8\" class=\"mw-redirect\" title=\"铼\">铼</a><br>\n186.2</td>\n<td bgcolor=\"#FFC0C0\"><b>76</b><br>\nOs<br>\n<a href=\"/wiki/%E9%8B%A8\" class=\"mw-redirect\" title=\"锇\">锇</a><br>\n190.2</td>\n<td bgcolor=\"#FFC0C0\"><b>77</b><br>\nIr<br>\n<a href=\"/wiki/%E9%8A%A5\" class=\"mw-redirect\" title=\"铱\">铱</a><br>\n192.2</td>\n<td bgcolor=\"#FFC0C0\"><b>78</b><br>\nPt<br>\n<a href=\"/wiki/%E9%89%91\" class=\"mw-redirect\" title=\"铂\">铂</a><br>\n195.1</td>\n<td bgcolor=\"#FFC0C0\"><b>79</b><br>\nAu<br>\n<a href=\"/wiki/%E9%87%91\" title=\"金\">金</a><br>\n197.0</td>\n<td bgcolor=\"#FFC0C0\"><span style=\"color:blue;\"><b>80</b></span><br>\nHg<br>\n<a href=\"/wiki/%E6%B1%9E\" title=\"汞\">汞</a><br>\n200.6</td>\n<td bgcolor=\"#CCCCCC\"><b>81</b><br>\nTl<br>\n<a href=\"/wiki/%E9%89%88\" class=\"mw-redirect\" title=\"铊\">铊</a><br>\n204.4</td>\n<td bgcolor=\"#CCCCCC\"><b>82</b><br>\nPb<br>\n<a href=\"/wiki/%E9%89%9B\" class=\"mw-redirect\" title=\"铅\">铅</a><br>\n207.2</td>\n<td bgcolor=\"#CCCCCC\"><b>83</b><br>\nBi<br>\n<a href=\"/wiki/%E9%89%8D\" class=\"mw-redirect\" title=\"铋\">铋</a><br>\n209.0</td>\n<td bgcolor=\"#CCCCCC\"><b>84</b><br>\nPo<br>\n<a href=\"/wiki/%E9%87%99\" class=\"mw-redirect\" title=\"钋\">钋</a><br>\n(209.0)</td>\n<td bgcolor=\"#FFFF99\"><b>85</b><br>\nAt<br>\n<a href=\"/wiki/%E7%A0%B9\" title=\"砹\">砹</a><br>\n(210.0)</td>\n<td bgcolor=\"#C0FFFF\"><span style=\"color:green;\"><b>86</b></span><br>\nRn<br>\n<a href=\"/wiki/%E6%B0%A1\" title=\"氡\">氡</a><br>\n(222.0)</td>\n<td valign=\"bottom\" style=\"font-size:50%;line-height:1.2\">P<br>\nO<br>\nN<br>\nM<br>\nL<br>\nK</td>\n<td valign=\"bottom\" style=\"font-size:50%;line-height:1.2\">8<br>\n18<br>\n32<br>\n18<br>\n8<br>\n2</td>\n</tr>\n<tr align=\"center\">\n<td><a href=\"/wiki/%E7%AC%AC7%E5%91%A8%E6%9C%9F%E5%85%83%E7%B4%A0\" title=\"第7周期元素\">7</a></td>\n<td bgcolor=\"#FF6666\"><b>87</b><br>\nFr<br>\n<a href=\"/wiki/%E9%8D%85\" class=\"mw-redirect\" title=\"钫\">钫</a><br>\n(223.0)</td>\n<td bgcolor=\"#FFDEAD\"><b>88</b><br>\nRa<br>\n<a href=\"/wiki/%E9%90%B3\" class=\"mw-redirect\" title=\"镭\">镭</a><br>\n(226.0)</td>\n<td bgcolor=\"#FF99CC\"><b>89</b>-<br>\n<b>103</b><br>\n<a href=\"/wiki/%E9%8C%92%E7%B3%BB%E5%85%83%E7%B4%A0\" class=\"mw-redirect\" title=\"锕系元素\">锕系<br>\n元素</a></td>\n<td bgcolor=\"#FFC0C0\"><span style=\"color:grey;\"><b>104</b></span><br>\nRf<br>\n<a href=\"/wiki/%E9%91%AA\" title=\"𬬻\">𬬻（鑪）</a><br>\n(265.1)</td>\n<td bgcolor=\"#FFC0C0\"><span style=\"color:grey;\"><b>105</b></span><br>\nDb<br>\n<a href=\"/wiki/%F0%A8%A7%80\" title=\"𨧀\">𬭊（𨧀）</a><br>\n(268.1)</td>\n<td bgcolor=\"#FFC0C0\"><span style=\"color:grey;\"><b>106</b></span><br>\nSg<br>\n<a href=\"/wiki/%F0%A8%AD%8E\" title=\"𨭎\">𬭳（𨭎）</a><br>\n(271.1)</td>\n<td bgcolor=\"#FFC0C0\"><span style=\"color:grey;\"><b>107</b></span><br>\nBh<br>\n<a href=\"/wiki/%F0%A8%A8%8F\" title=\"𨨏\">𬭛（𨨏）</a><br>\n(270.1)</td>\n<td bgcolor=\"#FFC0C0\"><span style=\"color:grey;\"><b>108</b></span><br>\nHs<br>\n<a href=\"/wiki/%F0%A8%AD%86\" title=\"𬭶\">𬭶（𨭆）</a><br>\n(277.2)</td>\n<td bgcolor=\"#E8E8E8\"><span style=\"color:grey;\"><b>109</b></span><br>\nMt<br>\n<a href=\"/wiki/%E4%A5%91\" title=\"鿏\">鿏（䥑）</a><br>\n(276.2)</td>\n<td bgcolor=\"#E8E8E8\"><span style=\"color:grey;\"><b>110</b></span><br>\nDs<br>\n<a href=\"/wiki/%E9%90%BD\" title=\"𫟼\">𫟼（鐽）</a><br>\n(281.2)</td>\n<td bgcolor=\"#E8E8E8\"><span style=\"color:grey;\"><b>111</b></span><br>\nRg<br>\n<a href=\"/wiki/%E9%8C%80\" title=\"錀\">𬬭（錀）</a><br>\n(280.2)</td>\n<td bgcolor=\"#FFC0C0\"><span style=\"color:grey;\"><b>112</b></span><br>\nCn<br>\n<a href=\"/wiki/%E9%8E%B6\" title=\"鿔\">鿔（鎶）</a><br>\n(285.2)</td>\n<td bgcolor=\"#E8E8E8\"><span style=\"color:grey;\"><b>113</b></span><br>\nNh<br>\n<a href=\"/wiki/Nh\" title=\"读音：ni3，字符描述：左「钅」右「尔」\"><img alt=\"缺字图片\" src=\"//upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Nihonium_zh-hans.svg/15px-Nihonium_zh-hans.svg.png\" width=\"15\" height=\"15\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Nihonium_zh-hans.svg/23px-Nihonium_zh-hans.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Nihonium_zh-hans.svg/30px-Nihonium_zh-hans.svg.png 2x\" data-file-width=\"200\" data-file-height=\"200\"></a><br>\n(284.2)</td>\n<td bgcolor=\"#CCCCCC\"><span style=\"color:grey;\"><b>114</b></span><br>\nFl<br>\n<a href=\"/wiki/%E9%88%87\" title=\"𫓧\">𫓧（鈇）</a><br>\n(289.2)</td>\n<td bgcolor=\"#E8E8E8\"><span style=\"color:grey;\"><b>115</b></span><br>\nMc<br>\n<a href=\"/wiki/%E9%8F%8C\" class=\"mw-redirect\" title=\"镆\">镆</a><br>\n(288.2)</td>\n<td bgcolor=\"#E8E8E8\"><span style=\"color:grey;\"><b>116</b></span><br>\nLv<br>\n<a href=\"/wiki/%E9%89%9D\" title=\"𫟷\">𫟷（鉝）</a><br>\n(293.2)</td>\n<td bgcolor=\"#E8E8E8\"><span style=\"color:grey;\"><b>117</b></span><br>\nTs<br>\n<a href=\"/wiki/Ts\" title=\"读音：tian2，字符描述：左「石」右「田」\"><img alt=\"缺字图片\" src=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/8f/Tennessine_zh.svg/15px-Tennessine_zh.svg.png\" width=\"15\" height=\"15\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/8/8f/Tennessine_zh.svg/23px-Tennessine_zh.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8f/Tennessine_zh.svg/30px-Tennessine_zh.svg.png 2x\" data-file-width=\"200\" data-file-height=\"200\"></a><br>\n(294.2)</td>\n<td bgcolor=\"#E8E8E8\"><span style=\"color:grey;\"><b>118</b></span><br>\nOg<br>\n<a href=\"/wiki/Og\" title=\"读音：ao4，字符描述：⿹气奥\"><img alt=\"缺字图片\" src=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c9/Oganesson_zh-hans.svg/15px-Oganesson_zh-hans.svg.png\" width=\"15\" height=\"15\" srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/c/c9/Oganesson_zh-hans.svg/23px-Oganesson_zh-hans.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c9/Oganesson_zh-hans.svg/30px-Oganesson_zh-hans.svg.png 2x\" data-file-width=\"200\" data-file-height=\"200\"></a><br>\n(294.2)</td>\n<td valign=\"bottom\" style=\"font-size:50%;line-height:1.2\">Q<br>\nP<br>\nO<br>\nN<br>\nM<br>\nL<br>\nK</td>\n<td valign=\"bottom\" style=\"font-size:50%;line-height:1.2\">8<br>\n18<br>\n32<br>\n32<br>\n18<br>\n8<br>\n2</td>\n</tr>\n\n<tr align=\"center\">\n<td colspan=\"3\" align=\"right\"><a href=\"/wiki/%E9%91%AD%E7%B3%BB%E5%85%83%E7%B4%A0\" class=\"mw-redirect\" title=\"镧系元素\">镧系元素</a></td>\n<td bgcolor=\"#FFBFFF\"><b>57</b><br>\nLa<br>\n<a href=\"/wiki/%E9%91%AD\" class=\"mw-redirect\" title=\"镧\">镧</a><br>\n138.9</td>\n<td bgcolor=\"#FFBFFF\"><b>58</b><br>\nCe<br>\n<a href=\"/wiki/%E9%88%B0\" class=\"mw-redirect\" title=\"铈\">铈</a><br>\n140.1</td>\n<td bgcolor=\"#FFBFFF\"><b>59</b><br>\nPr<br>\n<a href=\"/wiki/%E9%90%A0\" class=\"mw-redirect\" title=\"镨\">镨</a><br>\n140.9</td>\n<td bgcolor=\"#FFBFFF\"><b>60</b><br>\nNd<br>\n<a href=\"/wiki/%E9%87%B9\" class=\"mw-redirect\" title=\"钕\">钕</a><br>\n144.2</td>\n<td bgcolor=\"#FFBFFF\"><b>61</b><br>\nPm<br>\n<a href=\"/wiki/%E9%89%95\" class=\"mw-redirect\" title=\"钷\">钷</a><br>\n(144.9)</td>\n<td bgcolor=\"#FFBFFF\"><b>62</b><br>\nSm<br>\n<a href=\"/wiki/%E9%87%A4\" class=\"mw-redirect\" title=\"钐\">钐</a><br>\n150.4</td>\n<td bgcolor=\"#FFBFFF\"><b>63</b><br>\nEu<br>\n<a href=\"/wiki/%E9%8A%AA\" class=\"mw-redirect\" title=\"铕\">铕</a><br>\n152.0</td>\n<td bgcolor=\"#FFBFFF\"><b>64</b><br>\nGd<br>\n<a href=\"/wiki/%E9%87%93\" class=\"mw-redirect\" title=\"钆\">钆</a><br>\n157.3</td>\n<td bgcolor=\"#FFBFFF\"><b>65</b><br>\nTb<br>\n<a href=\"/wiki/%E9%8B%B1\" class=\"mw-redirect\" title=\"铽\">铽</a><br>\n158.9</td>\n<td bgcolor=\"#FFBFFF\"><b>66</b><br>\nDy<br>\n<a href=\"/wiki/%E9%8F%91\" class=\"mw-redirect\" title=\"镝\">镝</a><br>\n162.5</td>\n<td bgcolor=\"#FFBFFF\"><b>67</b><br>\nHo<br>\n<a href=\"/wiki/%E9%88%A5\" class=\"mw-redirect\" title=\"钬\">钬</a><br>\n164.9</td>\n<td bgcolor=\"#FFBFFF\"><b>68</b><br>\nEr<br>\n<a href=\"/wiki/%E9%89%BA\" class=\"mw-redirect\" title=\"铒\">铒</a><br>\n167.3</td>\n<td bgcolor=\"#FFBFFF\"><b>69</b><br>\nTm<br>\n<a href=\"/wiki/%E9%8A%A9\" class=\"mw-redirect\" title=\"铥\">铥</a><br>\n168.9</td>\n<td bgcolor=\"#FFBFFF\"><b>70</b><br>\nYb<br>\n<a href=\"/wiki/%E9%90%BF\" class=\"mw-redirect\" title=\"镱\">镱</a><br>\n173.0</td>\n<td bgcolor=\"#FFBFFF\"><b>71</b><br>\nLu<br>\n<a href=\"/wiki/%E9%8E%A6\" class=\"mw-redirect\" title=\"镥\">镥</a><br>\n175.0</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n<tr align=\"center\">\n<td colspan=\"3\" align=\"right\"><a href=\"/wiki/%E9%8C%92%E7%B3%BB%E5%85%83%E7%B4%A0\" class=\"mw-redirect\" title=\"锕系元素\">锕系元素</a></td>\n<td bgcolor=\"#FF99CC\"><b>89</b><br>\nAc<br>\n<a href=\"/wiki/%E9%8C%92\" class=\"mw-redirect\" title=\"锕\">锕</a><br>\n(227.0)</td>\n<td bgcolor=\"#FF99CC\"><b>90</b><br>\nTh<br>\n<a href=\"/wiki/%E9%87%B7\" class=\"mw-redirect\" title=\"钍\">钍</a><br>\n232.0</td>\n<td bgcolor=\"#FF99CC\"><b>91</b><br>\nPa<br>\n<a href=\"/wiki/%E9%8F%B7\" class=\"mw-redirect\" title=\"镤\">镤</a><br>\n231.0</td>\n<td bgcolor=\"#FF99CC\"><b>92</b><br>\nU<br>\n<a href=\"/wiki/%E9%88%BE\" title=\"铀\">铀</a><br>\n238.0</td>\n<td bgcolor=\"#FF99CC\"><b>93</b><br>\nNp<br>\n<a href=\"/wiki/%E9%8C%BC\" class=\"mw-redirect\" title=\"镎\">镎</a><br>\n(237.1)</td>\n<td bgcolor=\"#FF99CC\"><b>94</b><br>\nPu<br>\n<a href=\"/wiki/%E9%88%BD\" class=\"mw-redirect\" title=\"钚\">钚</a><br>\n(244.1)</td>\n<td bgcolor=\"#FF99CC\"><b>95</b><br>\nAm<br>\n<a href=\"/wiki/%E9%8B%82\" class=\"mw-redirect\" title=\"镅\">镅</a><br>\n(243.1)</td>\n<td bgcolor=\"#FF99CC\"><b>96</b><br>\nCm<br>\n<a href=\"/wiki/%E9%8B%A6\" class=\"mw-redirect\" title=\"锔\">锔</a><br>\n(247.1)</td>\n<td bgcolor=\"#FF99CC\"><b>97</b><br>\nBk<br>\n<a href=\"/wiki/%E9%89%B3\" class=\"mw-redirect\" title=\"锫\">锫</a><br>\n(247.1)</td>\n<td bgcolor=\"#FF99CC\"><b>98</b><br>\nCf<br>\n<a href=\"/wiki/%E9%89%B2\" class=\"mw-redirect\" title=\"锎\">锎</a><br>\n(252.1)</td>\n<td bgcolor=\"#FF99CC\"><b>99</b><br>\nEs<br>\n<a href=\"/wiki/%E9%91%80\" class=\"mw-redirect\" title=\"锿\">锿</a><br>\n(252.1)</td>\n<td bgcolor=\"#FF99CC\"><span style=\"color:gray\"><b>100</b></span><br>\nFm<br>\n<a href=\"/wiki/%E9%90%A8\" class=\"mw-redirect\" title=\"镄\">镄</a><br>\n(257.1)</td>\n<td bgcolor=\"#FF99CC\"><span style=\"color:gray\"><b>101</b></span><br>\nMd<br>\n<a href=\"/wiki/%E9%8D%86\" class=\"mw-redirect\" title=\"钔\">钔</a><br>\n(258.1)</td>\n<td bgcolor=\"#FF99CC\"><span style=\"color:gray\"><b>102</b></span><br>\nNo<br>\n<a href=\"/wiki/%E9%8D%A9\" class=\"mw-redirect\" title=\"锘\">锘</a><br>\n(259.1)</td>\n<td bgcolor=\"#FF99CC\"><span style=\"color:gray\"><b>103</b></span><br>\nLr<br>\n<a href=\"/wiki/%E9%90%92\" title=\"铹\">铹</a><br>\n(262.1)</td>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n</tbody></table>\n\n\n\n\n</body></html>\n"
  },
  {
    "path": "docs/js/table2excel.core.js",
    "content": "!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t(require(\"ExcelJS\")):\"function\"==typeof define&&define.amd?define([\"ExcelJS\"],t):\"object\"==typeof exports?exports.Table2Excel=t(require(\"ExcelJS\")):e.Table2Excel=t(e.ExcelJS)}(window,function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=3)}([function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.argb=t.mergeCells=t.cellPosition=t.columnIndex=t.saveAsExcel=void 0;var r=n(1),o=n(6),l=(t.saveAsExcel=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"table\",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"xlsx\",l=r.MIME_TYPES[n];l?e.xlsx.writeBuffer().then(function(e){(0,o.saveAs)(new Blob([e.buffer],{type:l}),t+\".\"+n)}):console.error(n+\" file extension is not supported\")},function(e){var t=\"A\".charCodeAt(0);return String.fromCharCode(t+e-1)}),i=t.columnIndex=function(e){var t=void 0;if((e+=1)<=26)t=l(e);else{var n=e%26,r=Math.floor(e/26);t=0===n?l(r-1)+l(26):l(r)+l(n)}return t},a=t.cellPosition=function(e,t){return\"\"+i(e)+(t+1)};t.mergeCells=function(e,t,n,r,o){var l=a(t,n),i=a(r,o);return e.mergeCells(l,i),e.getCell(l)},t.argb=function(e){var t=e.split(\"(\")[1].split(\")\")[0].split(\",\").map(function(e,t){return 3===t?255*e:e});return 3===t.length&&t.push(255),t.unshift(t.pop()),t.map(function(e){var t=parseInt(e).toString(16);return 1===t.length?\"0\"+t:t}).join(\"\").toUpperCase()}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});t.MIME_TYPES={xls:\"application/vnd.ms-excel\",xlsx:\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"},t.WIDTH_RATIO=.14},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=c(n(9)),o=c(n(10)),l=c(n(11)),i=c(n(12)),a=c(n(13)),u=c(n(14));function c(e){return e&&e.__esModule?e:{default:e}}t.default={fontPlugin:r.default,fillPlugin:o.default,formPlugin:l.default,alignmentPlugin:i.default,hyperlinkPlugin:a.default,autoWidthPlugin:u.default}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=i(n(4)),o=i(n(2)),l=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(0));function i(e){return e&&e.__esModule?e:{default:e}}r.default.plugins=o.default,r.default.utils=l,t.default=r.default},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=u(n(5)),l=n(0),i=n(1),a=u(n(2));function u(e){return e&&e.__esModule?e:{default:e}}var c=[\"workbookCreated\",\"worksheetCreated\",\"worksheetCompleted\",\"workcellCreated\"],f={workbook:{views:[{x:0,y:0,width:1e4,height:2e4,firstSheet:0,activeTab:1,visibility:\"visible\"}]},widthRatio:i.WIDTH_RATIO,plugins:[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(Object.values(a.default)))},s=function(){function e(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"table\",r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.tables=Array.from(\"string\"==typeof n?document.querySelectorAll(n):n),this.options=Object.assign({},f,r),this.plugins={},c.forEach(function(e){t.plugins[e]=t.options.plugins.filter(function(t){return t[e]}).map(function(t){return t[e]})}),this.pluginContext={}}return r(e,[{key:\"_invokePlugin\",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.pluginContext=Object.assign({},this.pluginContext,n),this.plugins[e].forEach(function(e){return e.call(t,t.pluginContext)})}},{key:\"toExcel\",value:function(){var e=this,t=this.tables,n=this.options,r=new o.default.Workbook;return Object.assign(r,n),this._invokePlugin(\"workbookCreated\",{workbook:r,tables:t}),t.forEach(function(t,n){var o=r.addWorksheet(\"Sheet \"+(n+1));e._invokePlugin(\"worksheetCreated\",{worksheet:o,table:t}),e.toSheet(t,o),e._invokePlugin(\"worksheetCompleted\",{worksheet:o,table:t})}),this.workbook=r}},{key:\"toSheet\",value:function(e,t){var n=this,r=e.rows.length,o=0;if(e.rows.length>0)for(var i=0;i<e.rows[0].cells.length;i++)o+=e.rows[0].cells[i].colSpan;var a=[];Array.from(e.rows).forEach(function(e){Array.from(e.cells).forEach(function(e){a.push({rowRange:{},colRange:{},el:e})})});for(var u=[],c=0;c<r;c++){for(var f=[],s=0;s<o;s++)f.push({cell:null});u.push(f)}for(var d=0,p=0;p<r;p++)for(var v=0;v<o;v++)if(!u[p][v].cell){var h=a[d++],g=h.el,b=g.rowSpan,w=g.colSpan;h.rowRange={from:p,to:p},h.colRange={from:v,to:v};for(var y=p;y<p+b;y++)for(var m=v;m<v+w;m++)u[y][m].cell=h,h.colRange.to=m,h.rowRange.to=y}a.forEach(function(e){var r=e.rowRange,o=e.colRange,i=e.el,a=i.innerText,u=(0,l.mergeCells)(t,o.from,r.from,o.to,r.to),c=getComputedStyle(i);u.value=a,n._invokePlugin(\"workcellCreated\",{workcell:u,cell:i,rowRange:r,colRange:o,cellStyle:c})})}},{key:\"export\",value:function(e,t){this.workbook||this.toExcel(),(0,l.saveAsExcel)(this.workbook,e,t)}}]),e}();t.default=s},function(t,n){t.exports=e},function(e,t,n){var r,o=o||function(e){\"use strict\";if(!(void 0===e||\"undefined\"!=typeof navigator&&/MSIE [1-9]\\./.test(navigator.userAgent))){var t=function(){return e.URL||e.webkitURL||e},n=e.document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"a\"),r=\"download\"in n,o=/constructor/i.test(e.HTMLElement)||e.safari,l=/CriOS\\/[\\d]+/.test(navigator.userAgent),i=function(t){(e.setImmediate||e.setTimeout)(function(){throw t},0)},a=function(e){setTimeout(function(){\"string\"==typeof e?t().revokeObjectURL(e):e.remove()},4e4)},u=function(e){return/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(e.type)?new Blob([String.fromCharCode(65279),e],{type:e.type}):e},c=function(c,f,s){s||(c=u(c));var d,p=this,v=\"application/octet-stream\"===c.type,h=function(){!function(e,t,n){for(var r=(t=[].concat(t)).length;r--;){var o=e[\"on\"+t[r]];if(\"function\"==typeof o)try{o.call(e,n||e)}catch(e){i(e)}}}(p,\"writestart progress write writeend\".split(\" \"))};if(p.readyState=p.INIT,r)return d=t().createObjectURL(c),void setTimeout(function(){n.href=d,n.download=f,function(e){var t=new MouseEvent(\"click\");e.dispatchEvent(t)}(n),h(),a(d),p.readyState=p.DONE});!function(){if((l||v&&o)&&e.FileReader){var n=new FileReader;return n.onloadend=function(){var t=l?n.result:n.result.replace(/^data:[^;]*;/,\"data:attachment/file;\");e.open(t,\"_blank\")||(e.location.href=t),t=void 0,p.readyState=p.DONE,h()},n.readAsDataURL(c),void(p.readyState=p.INIT)}d||(d=t().createObjectURL(c)),v?e.location.href=d:e.open(d,\"_blank\")||(e.location.href=d);p.readyState=p.DONE,h(),a(d)}()},f=c.prototype;return\"undefined\"!=typeof navigator&&navigator.msSaveOrOpenBlob?function(e,t,n){return t=t||e.name||\"download\",n||(e=u(e)),navigator.msSaveOrOpenBlob(e,t)}:(f.abort=function(){},f.readyState=f.INIT=0,f.WRITING=1,f.DONE=2,f.error=f.onwritestart=f.onprogress=f.onwrite=f.onabort=f.onerror=f.onwriteend=null,function(e,t,n){return new c(e,t||e.name||\"download\",n)})}}(\"undefined\"!=typeof self&&self||\"undefined\"!=typeof window&&window||this.content);\n/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */void 0!==e&&e.exports?e.exports.saveAs=o:null!==n(7)&&null!==n(8)&&(void 0===(r=function(){return o}.call(t,n,t,e))||(e.exports=r))},function(e,t){e.exports=function(){throw new Error(\"define cannot be used indirect\")}},function(e,t){(function(t){e.exports=t}).call(this,{})},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=n(0);t.default={workcellCreated:function(e){var t=e.workcell,n=e.cellStyle,l=n.fontWeight;t.font=r({},t.font||{},{name:n.fontFamily,color:{argb:(0,o.argb)(n.color)},bold:\"bold\"===l||+l>600})}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=n(0);t.default={workcellCreated:function(e){var t=e.workcell,n=e.cellStyle,l=(0,o.argb)(n.backgroundColor);t.fill=r({},t.fill||{},\"00000000\"===l?{type:\"pattern\",pattern:\"none\"}:{type:\"pattern\",pattern:\"solid\",fgColor:{argb:l}})}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={workcellCreated:function(e){var t=e.workcell,n=e.cell.children[0];n&&[\"INPUT\",\"SELECT\",\"TEXTAREA\"].includes(n.tagName)&&(t.value=n.value)}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};t.default={workcellCreated:function(e){var t=e.workcell,n=e.cellStyle,o=n.verticalAlign,l=n.textAlign;t.alignment=r({},t.alignment||{},{vertical:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",t=[\"top\",\"middle\",\"bottom\"],n=0;n<t.length;n++)if(e.includes(t[n]))return t[n];return{baseline:\"middle\",super:\"top\",sub:\"bottom\"}[e]}(o),horizontal:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",t=[\"right\",\"left\",\"center\",\"justify\"],n=0;n<t.length;n++)if(e.includes(t[n]))return t[n]}(l)})}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={workcellCreated:function(e){var t=e.workcell,n=e.cell.children[0];n&&\"A\"===n.tagName&&(t.value={text:n.innerText,hyperlink:n.href})}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={workcellCreated:function(e){var t=e.worksheet,n=e.colRange,r=(e.cell,e.cellStyle);n.from===n.to&&\"auto\"!==r.width&&(t.getColumn(n.from+1).width=+r.width.split(\"px\")[0]*this.options.widthRatio)}}}]).default});"
  },
  {
    "path": "es5/constants.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar MIME_TYPES = exports.MIME_TYPES = {\n  xls: 'application/vnd.ms-excel',\n  xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n};\n\nvar WIDTH_RATIO = exports.WIDTH_RATIO = .14;"
  },
  {
    "path": "es5/index.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _table2excel = require('./table2excel');\n\nvar _table2excel2 = _interopRequireDefault(_table2excel);\n\nvar _plugins = require('./plugins');\n\nvar _plugins2 = _interopRequireDefault(_plugins);\n\nvar _utils = require('./utils');\n\nvar utils = _interopRequireWildcard(_utils);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_table2excel2.default.plugins = _plugins2.default;\n_table2excel2.default.utils = utils;\n\nexports.default = _table2excel2.default;"
  },
  {
    "path": "es5/plugins/alignment.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n/**\n * '-webkit-right' -> 'right'\n * 'right' -> 'right'\n *  etc...\n */\nvar getHorizontalAlign = function getHorizontalAlign() {\n  var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n  var aligns = ['right', 'left', 'center', 'justify'];\n  for (var i = 0; i < aligns.length; i++) {\n    if (value.includes(aligns[i])) {\n      return aligns[i];\n    }\n  }\n};\n\n/**\n * 'baseline' -> 'middle'\n * 'text-top' -> 'top'\n * 'text-bottom' -> 'bottom'\n * 'sub' -> 'top'\n * 'super' -> 'bottom'\n */\nvar getVerticalAlign = function getVerticalAlign() {\n  var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n  var aligns = ['top', 'middle', 'bottom'];\n  for (var i = 0; i < aligns.length; i++) {\n    if (value.includes(aligns[i])) {\n      return aligns[i];\n    }\n  }\n\n  var mapping = {\n    'baseline': 'middle',\n    'super': 'top',\n    'sub': 'bottom'\n  };\n  return mapping[value];\n};\n\nexports.default = {\n  workcellCreated: function workcellCreated(_ref) {\n    var workcell = _ref.workcell,\n        cellStyle = _ref.cellStyle;\n    var verticalAlign = cellStyle.verticalAlign,\n        textAlign = cellStyle.textAlign;\n\n    workcell.alignment = _extends({}, workcell.alignment || {}, {\n      vertical: getVerticalAlign(verticalAlign),\n      horizontal: getHorizontalAlign(textAlign)\n    });\n  }\n};"
  },
  {
    "path": "es5/plugins/autoWidth.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  workcellCreated: function workcellCreated(_ref) {\n    var worksheet = _ref.worksheet,\n        colRange = _ref.colRange,\n        cell = _ref.cell,\n        cellStyle = _ref.cellStyle;\n\n    if (colRange.from === colRange.to && cellStyle.width !== 'auto') {\n      worksheet.getColumn(colRange.from + 1).width = +cellStyle.width.split('px')[0] * this.options.widthRatio;\n    }\n  }\n};"
  },
  {
    "path": "es5/plugins/fill.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _utils = require('../utils');\n\nexports.default = {\n  workcellCreated: function workcellCreated(_ref) {\n    var workcell = _ref.workcell,\n        cellStyle = _ref.cellStyle;\n\n    var color = (0, _utils.argb)(cellStyle.backgroundColor);\n\n    if (color === '00000000') {\n      // background is transparent, equals none pattern fill\n      workcell.fill = _extends({}, workcell.fill || {}, {\n        type: 'pattern',\n        pattern: 'none'\n      });\n    } else {\n      workcell.fill = _extends({}, workcell.fill || {}, {\n        type: 'pattern',\n        pattern: 'solid',\n        fgColor: { argb: color }\n      });\n    }\n  }\n};"
  },
  {
    "path": "es5/plugins/font.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _utils = require('../utils');\n\nexports.default = {\n  workcellCreated: function workcellCreated(_ref) {\n    var workcell = _ref.workcell,\n        cellStyle = _ref.cellStyle;\n\n    var fontWeight = cellStyle.fontWeight;\n\n    workcell.font = _extends({}, workcell.font || {}, {\n      name: cellStyle.fontFamily,\n      color: { argb: (0, _utils.argb)(cellStyle.color) },\n      bold: fontWeight === 'bold' || +fontWeight > 600 ? true : false\n    });\n  }\n};"
  },
  {
    "path": "es5/plugins/form.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  workcellCreated: function workcellCreated(_ref) {\n    var workcell = _ref.workcell,\n        cell = _ref.cell;\n\n    var child = cell.children[0];\n    if (child && ['INPUT', 'SELECT', 'TEXTAREA'].includes(child.tagName)) {\n      workcell.value = child.value;\n    }\n  }\n};"
  },
  {
    "path": "es5/plugins/hyperlink.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  workcellCreated: function workcellCreated(_ref) {\n    var workcell = _ref.workcell,\n        cell = _ref.cell;\n\n    var child = cell.children[0];\n    if (child && child.tagName === 'A') {\n      workcell.value = { text: child.innerText, hyperlink: child.href };\n    }\n  }\n};"
  },
  {
    "path": "es5/plugins/index.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _font = require('./font');\n\nvar _font2 = _interopRequireDefault(_font);\n\nvar _fill = require('./fill');\n\nvar _fill2 = _interopRequireDefault(_fill);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _alignment = require('./alignment');\n\nvar _alignment2 = _interopRequireDefault(_alignment);\n\nvar _hyperlink = require('./hyperlink');\n\nvar _hyperlink2 = _interopRequireDefault(_hyperlink);\n\nvar _autoWidth = require('./autoWidth');\n\nvar _autoWidth2 = _interopRequireDefault(_autoWidth);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n  fontPlugin: _font2.default,\n  fillPlugin: _fill2.default,\n  formPlugin: _form2.default,\n  alignmentPlugin: _alignment2.default,\n  hyperlinkPlugin: _hyperlink2.default,\n  autoWidthPlugin: _autoWidth2.default\n};"
  },
  {
    "path": "es5/table2excel.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _exceljs = require('exceljs/dist/es5/exceljs.browser');\n\nvar _exceljs2 = _interopRequireDefault(_exceljs);\n\nvar _utils = require('./utils');\n\nvar _constants = require('./constants');\n\nvar _plugins = require('./plugins');\n\nvar _plugins2 = _interopRequireDefault(_plugins);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar PLUGIN_FUNCS = ['workbookCreated', 'worksheetCreated', 'worksheetCompleted', 'workcellCreated'];\nvar DEFAULT_WORKBOOK_OPTIONS = {\n  views: [{\n    x: 0, y: 0, width: 10000, height: 20000,\n    firstSheet: 0, activeTab: 1, visibility: 'visible'\n  }]\n};\nvar DEFAULT_OPTIONS = {\n  workbook: DEFAULT_WORKBOOK_OPTIONS,\n  widthRatio: _constants.WIDTH_RATIO,\n  plugins: [].concat(_toConsumableArray(Object.values(_plugins2.default)))\n};\n\nvar Table2Excel = function () {\n  function Table2Excel() {\n    var _this = this;\n\n    var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'table';\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Table2Excel);\n\n    this.tables = Array.from(typeof selector === 'string' ? document.querySelectorAll(selector) : selector);\n\n    this.options = Object.assign({}, DEFAULT_OPTIONS, options);\n\n    this.plugins = {};\n    PLUGIN_FUNCS.forEach(function (funName) {\n      _this.plugins[funName] = _this.options.plugins.filter(function (plugin) {\n        return plugin[funName];\n      }).map(function (plugin) {\n        return plugin[funName];\n      });\n    });\n\n    this.pluginContext = {};\n  }\n\n  _createClass(Table2Excel, [{\n    key: '_invokePlugin',\n    value: function _invokePlugin(func) {\n      var _this2 = this;\n\n      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      this.pluginContext = Object.assign({}, this.pluginContext, context);\n      this.plugins[func].forEach(function (handler) {\n        return handler.call(_this2, _this2.pluginContext);\n      });\n    }\n  }, {\n    key: 'toExcel',\n    value: function toExcel() {\n      var _this3 = this;\n\n      var tables = this.tables,\n          options = this.options;\n\n      var workbook = new _exceljs2.default.Workbook(); // create workbook\n\n      Object.assign(workbook, options);\n\n      // workbookCreated plugins\n      this._invokePlugin('workbookCreated', { workbook: workbook, tables: tables });\n\n      tables.forEach(function (table, index) {\n        var worksheet = workbook.addWorksheet('Sheet ' + (index + 1));\n\n        // worksheetCreated plugins\n        _this3._invokePlugin('worksheetCreated', { worksheet: worksheet, table: table });\n\n        _this3.toSheet(table, worksheet);\n\n        // worksheetCompleted plugins\n        _this3._invokePlugin('worksheetCompleted', { worksheet: worksheet, table: table });\n      });\n\n      return this.workbook = workbook;\n    }\n  }, {\n    key: 'toSheet',\n    value: function toSheet(table, worksheet) {\n      var _this4 = this;\n\n      // get total cols and rows\n      var totalRows = table.rows.length;\n      var totalCols = 0;\n\n      if (table.rows.length > 0) {\n        for (var i = 0; i < table.rows[0].cells.length; i++) {\n          totalCols += table.rows[0].cells[i].colSpan;\n        }\n      }\n\n      var cells = [];\n      Array.from(table.rows).forEach(function (row) {\n        Array.from(row.cells).forEach(function (cell) {\n          cells.push({\n            rowRange: {},\n            colRange: {},\n            el: cell\n          });\n        });\n      });\n\n      // create matrix\n      var helperMatrix = [];\n\n      for (var r = 0; r < totalRows; r++) {\n        var row = [];\n        for (var c = 0; c < totalCols; c++) {\n          row.push({ cell: null });\n        }\n        helperMatrix.push(row);\n      }\n\n      // mark matrix\n      var cursor = 0;\n\n      for (var _r = 0; _r < totalRows; _r++) {\n        for (var _c = 0; _c < totalCols; _c++) {\n          // skip if current matrix unit is already assigned\n          if (helperMatrix[_r][_c].cell) {\n            continue;\n          }\n\n          // assign cell to current matrix unit\n          var cell = cells[cursor++];\n          var _cell$el = cell.el,\n              rowSpan = _cell$el.rowSpan,\n              colSpan = _cell$el.colSpan;\n\n\n          cell.rowRange = { from: _r, to: _r };\n          cell.colRange = { from: _c, to: _c };\n\n          for (var y = _r; y < _r + rowSpan; y++) {\n            for (var x = _c; x < _c + colSpan; x++) {\n              helperMatrix[y][x].cell = cell;\n              cell.colRange.to = x;\n              cell.rowRange.to = y;\n            }\n          }\n        }\n      }\n\n      // read matrix to sheet\n      cells.forEach(function (cell) {\n        var rowRange = cell.rowRange,\n            colRange = cell.colRange,\n            el = cell.el;\n        var innerText = el.innerText;\n\n        var workcell = (0, _utils.mergeCells)(worksheet, colRange.from, rowRange.from, colRange.to, rowRange.to);\n        var cellStyle = getComputedStyle(el);\n\n        workcell.value = innerText;\n\n        // workcellCreated\n        _this4._invokePlugin('workcellCreated', { workcell: workcell, cell: el, rowRange: rowRange, colRange: colRange, cellStyle: cellStyle });\n      });\n    }\n  }, {\n    key: 'export',\n    value: function _export(fileName, ext) {\n      if (!this.workbook) {\n        this.toExcel();\n      }\n      (0, _utils.saveAsExcel)(this.workbook, fileName, ext);\n    }\n  }]);\n\n  return Table2Excel;\n}();\n\nexports.default = Table2Excel;"
  },
  {
    "path": "es5/utils.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.argb = exports.mergeCells = exports.cellPosition = exports.columnIndex = exports.saveAsExcel = undefined;\n\nvar _constants = require('./constants');\n\nvar _fileSaver = require('file-saver');\n\nvar saveAsExcel = exports.saveAsExcel = function saveAsExcel(workbook) {\n\tvar filename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'table';\n\tvar ext = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'xlsx';\n\n\tvar type = _constants.MIME_TYPES[ext];\n\n\tif (!type) {\n\t\tconsole.error(ext + ' file extension is not supported');\n\t\treturn;\n\t}\n\n\tworkbook.xlsx.writeBuffer().then(function (uint8) {\n\t\t(0, _fileSaver.saveAs)(new Blob([uint8.buffer], { type: type }), filename + '.' + ext);\n\t});\n};\n\nvar letter = function letter(num) {\n\tvar a = 'A'.charCodeAt(0);\n\treturn String.fromCharCode(a + num - 1);\n};\n\n/**\n * 0 => A\n * 25 => Z\n * 26 => AA\n */\nvar columnIndex = exports.columnIndex = function columnIndex(num) {\n\tvar result = void 0;\n\tnum = num + 1;\n\n\tif (num <= 26) {\n\t\tresult = letter(num);\n\t} else {\n\t\tvar mod = num % 26;\n\t\tvar quotient = Math.floor(num / 26);\n\n\t\tif (mod === 0) {\n\t\t\tresult = letter(quotient - 1) + letter(26);\n\t\t} else {\n\t\t\tresult = letter(quotient) + letter(mod);\n\t\t}\n\t}\n\treturn result;\n};\n\n// x = 0, y = 0 => 'A1'\n// x = 0, y = 1 => 'A2'\n// x = 1, y = 0 => 'B1'\nvar cellPosition = exports.cellPosition = function cellPosition(x, y) {\n\treturn '' + columnIndex(x) + (y + 1);\n};\n\nvar mergeCells = exports.mergeCells = function mergeCells(sheet, x1, y1, x2, y2) {\n\tvar fromCell = cellPosition(x1, y1);\n\tvar toCell = cellPosition(x2, y2);\n\tsheet.mergeCells(fromCell, toCell);\n\treturn sheet.getCell(fromCell);\n};\n\n/**\n * convert rgb(0,0,0) rgba(0,0,0,0) to argb: FF00FF00\n */\nvar argb = exports.argb = function argb(color) {\n\tvar values = color.split('(')[1].split(')')[0].split(',').map(function (v, i) {\n\t\treturn i === 3 ? v * 255 : v;\n\t});\n\n\tif (values.length === 3) {\n\t\tvalues.push(255);\n\t}\n\n\tvalues.unshift(values.pop());\n\n\treturn values.map(function (v) {\n\t\tvar s = parseInt(v).toString(16);\n\t\treturn s.length === 1 ? '0' + s : s;\n\t}).join('').toUpperCase();\n};"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"table2excel.js\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"es5/index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n    \"build\": \"webpack --config webpack.core.config.js -p && webpack --config webpack.umd.config.js -p\",\n    \"build:es5\": \"babel src --out-dir es5\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/jackgit/table2excel.js.git\"\n  },\n  \"keywords\": [\n    \"table\",\n    \"js\",\n    \"excel\",\n    \"xlsx\",\n    \"xls\"\n  ],\n  \"author\": \"ygjack414@hotmail.com\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jackgit/table2excel.js/issues\"\n  },\n  \"homepage\": \"https://github.com/jackgit/table2excel.js#readme\",\n  \"dependencies\": {\n    \"file-saver\": \"^1.3.3\"\n  },\n  \"peerDependencies\": {\n    \"exceljs\": \"^0.6.2\"\n  },\n  \"devDependencies\": {\n    \"babel-cli\": \"^6.26.0\",\n    \"babel-core\": \"^6.26.0\",\n    \"babel-loader\": \"^7.1.2\",\n    \"babel-preset-es2015\": \"^6.24.1\",\n    \"babel-preset-stage-1\": \"^6.24.1\",\n    \"cross-env\": \"^5.2.0\"\n  }\n}\n"
  },
  {
    "path": "src/constants.js",
    "content": "export const MIME_TYPES = {\n  xls: 'application/vnd.ms-excel',\n  xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n}\n\nexport const WIDTH_RATIO = .14\n"
  },
  {
    "path": "src/index.js",
    "content": "import Table2Excel from './table2excel'\nimport plugins from './plugins'\nimport * as utils from './utils'\n\nTable2Excel.plugins = plugins\nTable2Excel.utils = utils\n\nexport default Table2Excel\n"
  },
  {
    "path": "src/plugins/alignment.js",
    "content": "/**\n * '-webkit-right' -> 'right'\n * 'right' -> 'right'\n *  etc...\n */\nconst getHorizontalAlign = (value = '') => {\n  const aligns = ['right', 'left', 'center', 'justify']\n  for (let i = 0; i < aligns.length; i++) {\n    if (value.includes(aligns[i])) {\n      return aligns[i]\n    }\n  }\n}\n\n/**\n * 'baseline' -> 'middle'\n * 'text-top' -> 'top'\n * 'text-bottom' -> 'bottom'\n * 'sub' -> 'top'\n * 'super' -> 'bottom'\n */\nconst getVerticalAlign = (value = '') => {\n  const aligns = ['top', 'middle', 'bottom']\n  for (let i = 0; i < aligns.length; i++) {\n    if (value.includes(aligns[i])) {\n      return aligns[i]\n    }\n  }\n\n  const mapping = {\n    'baseline': 'middle',\n    'super': 'top',\n    'sub': 'bottom'\n  }\n  return mapping[value]\n}\n\nexport default {\n  workcellCreated ({ workcell, cellStyle }) {\n    const { verticalAlign, textAlign } = cellStyle\n    workcell.alignment = {\n      ...(workcell.alignment || {}),\n      ...({\n        vertical: getVerticalAlign(verticalAlign),\n        horizontal: getHorizontalAlign(textAlign)\n      })\n    }\n  }\n}\n"
  },
  {
    "path": "src/plugins/autoWidth.js",
    "content": "export default {\n  workcellCreated ({ worksheet, colRange, cell, cellStyle }) {\n    if (colRange.from === colRange.to && cellStyle.width !== 'auto') {\n      worksheet.getColumn(colRange.from + 1).width = (+cellStyle.width.split('px')[0]) * this.options.widthRatio\n    }\n  }\n}\n"
  },
  {
    "path": "src/plugins/fill.js",
    "content": "import { argb } from '../utils'\n\nexport default {\n  workcellCreated ({ workcell, cellStyle }) {\n    const color = argb(cellStyle.backgroundColor)\n\n    if (color === '00000000') {\n      // background is transparent, equals none pattern fill\n      workcell.fill = {\n        ...(workcell.fill || {}),\n        ...({\n          type: 'pattern',\n          pattern: 'none'\n        })\n      }\n    } else {\n      workcell.fill = {\n        ...(workcell.fill || {}),\n        ...({\n          type: 'pattern',\n          pattern: 'solid',\n          fgColor: { argb: color }\n        })\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/plugins/font.js",
    "content": "import { argb } from '../utils'\n\nexport default {\n  workcellCreated ({ workcell, cellStyle }) {\n    const fontWeight = cellStyle.fontWeight\n\n    workcell.font = {\n      ...(workcell.font || {}),\n      ...({\n        name: cellStyle.fontFamily,\n        color: { argb: argb(cellStyle.color) },\n        bold: (fontWeight === 'bold' || +fontWeight > 600) ? true : false\n      })\n    }\n  }\n}\n"
  },
  {
    "path": "src/plugins/form.js",
    "content": "export default {\n  workcellCreated ({ workcell, cell }) {\n    const child = cell.children[0]\n    if (child && ['INPUT', 'SELECT', 'TEXTAREA'].includes(child.tagName)) {\n      workcell.value = child.value\n    }\n  }\n}\n"
  },
  {
    "path": "src/plugins/hyperlink.js",
    "content": "export default {\n  workcellCreated ({ workcell, cell }) {\n    const child = cell.children[0]\n    if (child && child.tagName === 'A') {\n      workcell.value = { text: child.innerText, hyperlink: child.href }\n    }\n  }\n}\n"
  },
  {
    "path": "src/plugins/index.js",
    "content": "import fontPlugin from './font'\nimport fillPlugin from './fill'\nimport formPlugin from './form'\nimport alignmentPlugin from './alignment'\nimport hyperlinkPlugin from './hyperlink'\nimport autoWidthPlugin from './autoWidth'\n\nexport default {\n  fontPlugin,\n  fillPlugin,\n  formPlugin,\n  alignmentPlugin,\n  hyperlinkPlugin,\n  autoWidthPlugin\n}\n"
  },
  {
    "path": "src/table2excel.js",
    "content": "import ExcelJS from 'exceljs/dist/es5/exceljs.browser'\nimport { mergeCells, saveAsExcel } from './utils'\nimport { WIDTH_RATIO } from './constants'\nimport plugins from './plugins'\n\nconst PLUGIN_FUNCS = ['workbookCreated', 'worksheetCreated', 'worksheetCompleted', 'workcellCreated']\nconst DEFAULT_WORKBOOK_OPTIONS = {\n  views: [{\n    x: 0, y: 0, width: 10000, height: 20000,\n    firstSheet: 0, activeTab: 1, visibility: 'visible'\n  }]\n}\nconst DEFAULT_OPTIONS = {\n  workbook: DEFAULT_WORKBOOK_OPTIONS,\n  widthRatio: WIDTH_RATIO,\n  plugins: [...Object.values(plugins)]\n}\n\nexport default class Table2Excel {\n\n  constructor (selector = 'table', options = {}) {\n    this.tables = Array.from(\n      typeof selector === 'string'\n        ? document.querySelectorAll(selector)\n        : selector\n      )\n\n    this.options = Object.assign({}, DEFAULT_OPTIONS, options)\n\n    this.plugins = {}\n    PLUGIN_FUNCS.forEach(funName => {\n      this.plugins[funName] = this.options.plugins.filter(plugin => plugin[funName]).map(plugin => plugin[funName])\n    })\n\n    this.pluginContext = {}\n  }\n\n  _invokePlugin (func, context = {}) {\n    this.pluginContext = Object.assign({}, this.pluginContext, context)\n    this.plugins[func].forEach(handler => handler.call(this, this.pluginContext))\n  }\n\n  toExcel () {\n    const { tables, options } = this\n    const workbook = new ExcelJS.Workbook() // create workbook\n\n    Object.assign(workbook, options)\n\n    // workbookCreated plugins\n    this._invokePlugin('workbookCreated', { workbook, tables })\n\n    tables.forEach((table, index) => {\n      const worksheet = workbook.addWorksheet(`Sheet ${index + 1}`)\n\n      // worksheetCreated plugins\n      this._invokePlugin('worksheetCreated', { worksheet, table })\n\n      this.toSheet(table, worksheet)\n\n      // worksheetCompleted plugins\n      this._invokePlugin('worksheetCompleted', { worksheet, table })\n    })\n\n    return this.workbook = workbook\n  }\n\n  toSheet (table, worksheet) {\n    // get total cols and rows\n    const totalRows = table.rows.length\n    let totalCols = 0\n\n    if (table.rows.length > 0) {\n      for (let i = 0; i < table.rows[0].cells.length; i++) {\n        totalCols += table.rows[0].cells[i].colSpan\n      }\n    }\n\n    const cells = []\n    Array.from(table.rows).forEach(row => {\n      Array.from(row.cells).forEach(cell => {\n        cells.push({\n          rowRange: {},\n          colRange: {},\n          el: cell\n        })\n      })\n    })\n\n    // create matrix\n    const helperMatrix = []\n\n    for (let r = 0; r < totalRows; r++) {\n      const row = []\n      for (let c = 0; c < totalCols; c++) {\n        row.push({ cell: null })\n      }\n      helperMatrix.push(row)\n    }\n\n\n    // mark matrix\n    let cursor = 0\n\n    for (let r = 0; r < totalRows; r++) {\n      for (let c = 0; c < totalCols; c++) {\n        // skip if current matrix unit is already assigned\n        if (helperMatrix[r][c].cell) {\n          continue\n        }\n\n        // assign cell to current matrix unit\n        const cell = cells[cursor++]\n        const { rowSpan, colSpan } = cell.el\n\n        cell.rowRange = { from: r, to: r }\n        cell.colRange = { from: c, to: c }\n\n        for (let y = r; y < r + rowSpan; y++) {\n          for (let x = c; x < c + colSpan; x++) {\n            helperMatrix[y][x].cell = cell\n            cell.colRange.to = x\n            cell.rowRange.to = y\n          }\n        }\n      }\n    }\n\n\n    // read matrix to sheet\n    cells.forEach(cell => {\n      const { rowRange, colRange, el } = cell\n      const { innerText } = el\n      const workcell = mergeCells(worksheet, colRange.from, rowRange.from, colRange.to, rowRange.to)\n      const cellStyle = getComputedStyle(el)\n\n      workcell.value = innerText\n\n      // workcellCreated\n      this._invokePlugin('workcellCreated', { workcell, cell: el, rowRange, colRange, cellStyle })\n    })\n  }\n\n  export (fileName, ext) {\n    if (!this.workbook) {\n      this.toExcel()\n    }\n    saveAsExcel(this.workbook, fileName, ext)\n  }\n}\n"
  },
  {
    "path": "src/utils.js",
    "content": "import { MIME_TYPES } from './constants'\nimport { saveAs } from 'file-saver'\n\nexport const saveAsExcel = (workbook, filename = 'table', ext = 'xlsx') => {\n\tconst type = MIME_TYPES[ext]\n\n\tif (!type) {\n\t\tconsole.error(`${ext} file extension is not supported`)\n\t\treturn\n\t}\n\n\tworkbook.xlsx.writeBuffer().then(uint8 => {\n\t\tsaveAs(\n      new Blob([uint8.buffer], { type }),\n      `${filename}.${ext}`\n    )\n\t})\n}\n\nconst letter = num => {\n\tconst a = 'A'.charCodeAt(0)\n\treturn String.fromCharCode(a + num - 1)\n}\n\n/**\n * 0 => A\n * 25 => Z\n * 26 => AA\n */\nexport const columnIndex = num => {\n\tlet result\n\tnum = num + 1\n\n\tif (num <= 26) {\n\t\tresult = letter(num)\n\t} else {\n\t\tconst mod = num % 26\n\t\tconst quotient = Math.floor(num / 26)\n\n\t\tif (mod === 0) {\n\t\t\tresult = letter(quotient - 1) + letter(26)\n\t\t} else {\n\t\t\tresult = letter(quotient) + letter(mod)\n\t\t}\n\t}\n\treturn result\n}\n\n// x = 0, y = 0 => 'A1'\n// x = 0, y = 1 => 'A2'\n// x = 1, y = 0 => 'B1'\nexport const cellPosition = (x, y) => {\n  return `${columnIndex(x)}${y + 1}`\n}\n\nexport const mergeCells = (sheet, x1, y1, x2, y2) => {\n  const fromCell = cellPosition(x1, y1)\n  const toCell = cellPosition(x2, y2)\n  sheet.mergeCells(fromCell, toCell)\n  return sheet.getCell(fromCell)\n}\n\n/**\n * convert rgb(0,0,0) rgba(0,0,0,0) to argb: FF00FF00\n */\nexport const argb = color => {\n\tconst values = color\n\t\t.split('(')[1].split(')')[0].split(',')\n\t\t.map((v, i) => i === 3 ? v * 255 : v)\n\n\tif (values.length === 3) {\n\t\tvalues.push(255)\n\t}\n\n\tvalues.unshift(values.pop())\n\n\treturn values.map(v => {\n\t\tconst s = parseInt(v).toString(16)\n\t\treturn s.length === 1 ? `0${s}` : s\n\t}).join('').toUpperCase()\n}\n"
  },
  {
    "path": "webpack.core.config.js",
    "content": "module.exports = {\n  entry: './src/index.js',\n  output: {\n    filename: './dist/table2excel.core.js',\n    library: 'Table2Excel',\n    libraryTarget: 'umd',\n    libraryExport: 'default'\n  },\n  module: {\n    rules: [\n      {\n        test: /\\.js$/,\n        use: [\n          'babel-loader',\n        ],\n        exclude: /node_modules/\n      }\n    ]\n  },\n  externals: {\n    'exceljs/dist/es5/exceljs.browser': 'ExcelJS'\n  },\n  node: {\n    fs: 'empty'\n  }\n};\n"
  },
  {
    "path": "webpack.umd.config.js",
    "content": "module.exports = {\n  entry: './src/index.js',\n  output: {\n    filename: './dist/table2excel.min.js',\n    library: 'Table2Excel',\n    libraryTarget: 'umd',\n    libraryExport: 'default'\n  },\n  module: {\n    rules: [\n      {\n        test: /\\.js$/,\n        use: [\n          'babel-loader',\n        ],\n        exclude: /node_modules/\n      }\n    ]\n  },\n  node: {\n    fs: 'empty'\n  }\n};\n"
  }
]