最近碰到個須要自動生成表格的任務,做爲前端的我,就想在 node 和瀏覽器中生成強大的表格,因此特此研究了不少關於表格的 npm 庫
npm install
html
npm install -g nodemon
前端
調試使用,替代 node 命令,實現保存文件,node 自動從新啓動執行,必須全局安裝才能運行vue
nodemon app.js
node
由於每次生成完表格,每次都須要打開表格查看樣式,在 windows 電腦中,打開表格以後就鎖定不能生成新文件了,原本想着能導出一個 html 文件對應表格的樣式react
vscode 中打開調試右側設置編輯,將下方代碼複製進去,點 nodemon 啓動就能夠進行 debug 調試了webpack
{ "type": "node", "request": "launch", "name": "nodemon", "runtimeExecutable": "nodemon", "program": "${workspaceFolder}/app.js", "restart": true, "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "skipFiles": ["<node_internals>/**"] },
每次生成完新表格,都須要從新打開表格查看樣式,在 windows 電腦中,打開表格以後就鎖定了,再次生成新表格就會報錯,文件已鎖定,不能寫入,對於想偷懶的我,能不能實現像 webpack 熱更新功能那種,修改樣式 js 頁面自動更新呢?git
wps 自帶另存 html 文件功能,可是沒有提供生成的 api ,網上也搜索不到對應的轉換功能,
原本覺得本身要實現一套表格轉 html 的功能。經過不斷嘗試,偶然間發現手機瀏覽器能夠直接打開預覽 xlsx 文件,心裏狂喜啊github
進入 webpack 目錄安裝依賴包,安裝好以後執行web
npm run dev
chrome
啓動成功以後,會自動打開帶有 ip 地址的預覽地址,此時在電腦瀏覽器會自動下載 xlsx 文件,忽略無論,用手機直接打開此地址,就能看到 xlsx 表格的內容了,而且每次新修改內容和樣式,都會自動刷新頁面顯示新表格.
谷歌瀏覽器插件:
瀏覽器中實現生成 xlsx 表格方法
進入 browser 目錄安裝依賴包,安裝好以後執行
npm run dev
啓動成功以後,拖動根目錄 src 下的李四表格到頁面上的輸入框裏,成功生成表格以後會生成一個下載連接地址,右鍵在新標籤頁打開連接,即會生成一個新的表格文件出來,完整 api 使用和 demo 文件請參考 index.js
vue 和 react 用法能夠參考此例子,若是有必要也能夠此版本庫的例子
在使用這個庫以前,先介紹庫中的一些概念。
constXLSX = require('xlsx'); let html = XLSX.utils.sheet_to_html(workbook.Sheets.Sheet1)
生成 html 的用法,而且不會有任何樣式
由於 exceljs 讀取文件不支持 sync 同步讀取,給的實例也是 await 例子.致使我讀取完遇到一個問題,就是總是生成不成功,最後發現必需要把全部邏輯所有放入函數中,像下方這樣
(async function (params) { let res = await workbook.xlsx.readFile(`${__dirname}/趙六.xlsx`); //執行全部數據處理邏輯 //執行寫的邏輯 workbook.xlsx.writeFile(path.resolve(__dirname, '../webpack/test222.xlsx')); });
全部邏輯所有要寫入這個函數中,這樣原本是能夠的,可是出錯調試概率較大,而且讀取到的數據龐大還須要額外處理,因此我讀取數據邏輯就用的 node-xlsx,十分簡單方便,若是你用的 exceljs 讀取文件數據出現問題,大機率是異步同步邏輯搞錯了,多加註意便可
列寬不知道是以什麼爲單位,反正不是像素(已測量),例子中是以釐米爲單位再乘以 4.7 的結果設置的,4.7 是不斷測試的結果.
快捷查看列寬的方法,打開 wps 表格,長按列與列字母間的豎線,就能看到列寬,取釐米的單位便可.見下圖
前景色設置必須右鍵單元格選擇設置單元格格式,而後選擇圖案樣式選擇顏色,就能夠前景色填充
worksheet.getCell('A2').fill = { type: 'pattern', pattern:'darkTrellis', fgColor:{argb:'FFFFFF00'}, bgColor:{argb:'FF0000FF'} };
worksheet.getCell('A2').fill = { type: "pattern", pattern: "solid", fgColor: { argb: next.bgColor }, }
解決 Mac 下編輯 Microsoft Office Word 文檔與 Windows 排版不一致的問題,,不一樣的系統用 wps 打開相同的表格,打印預覽的時候,表格寬度顯示不同
個人解決辦法就是 mac 下顯示正常,按 mac 下的寬度來設置就能夠了
~
創做不易,若是對你有幫助,請給個星星 star✨✨ 謝謝,地址https://github.com/lingxiaoyi/excel~