摘要:前言用做服務(wù)器端表格處理時(shí),需要使用處理模塊,網(wǎng)上能搜到的插件大概就三四種等,經(jīng)過我的使用,發(fā)現(xiàn)最強(qiáng)大,最全面的就是。合并單元格使用此時(shí)合并了兩個(gè)單元格。后續(xù)正常調(diào)用即可。
前言
用node做服務(wù)器端表格處理時(shí),需要使用excel處理模塊,網(wǎng)上能搜到的插件大概就三四種(xlsx,excel-export,node-xlsx等),經(jīng)過我的使用,發(fā)現(xiàn)最強(qiáng)大,api最全面的就是exceljs。
然而因?yàn)槠涔俜轿臋n十分簡(jiǎn)潔(陋),初起時(shí)使用過程并不那么順利,這里結(jié)合自己的經(jīng)驗(yàn),對(duì)exceljs模塊及其基本用法進(jìn)行簡(jiǎn)單介紹,對(duì)一些自己遇到的坑進(jìn)行總結(jié)。
npm install exceljs
使用npm命令安裝之后,在所需要的文件中引入exceljs模塊:
var Excel = require("exceljs");二、創(chuàng)建工作簿及工作表
引入之后,我們就可以直接通過js創(chuàng)建工作簿,注意:創(chuàng)建工作表之前必須創(chuàng)建工作簿。
var workbook = new Excel.Workbook();
工作簿有很多屬性可以設(shè)置,比如創(chuàng)建人、修改時(shí)間等一般用不上的信息,一般不需要設(shè)置,如果你有特殊需要,那么請(qǐng)參照下述設(shè)置即可:
workbook.creator = "WJY";//設(shè)置創(chuàng)建者
workbook.lastModifiedBy = "Her";//上次修改人
workbook.created = new Date(1985, 8, 30);//創(chuàng)建時(shí)間
workbook.modified = new Date();//修改時(shí)間
更多詳細(xì)的關(guān)于創(chuàng)建工作簿的屬性設(shè)置請(qǐng)[參考官方][1]。
創(chuàng)建工作簿之后,需要為工作簿添加工作表,用來存放我們的數(shù)據(jù):
var sheet = workbook.addWorksheet("My Sheet");
通常這樣創(chuàng)建就夠了,但是也可以設(shè)置創(chuàng)建的工作表的屬性:
// 創(chuàng)建標(biāo)簽為紅色的表格
var sheet = workbook.addWorksheet("My Sheet", {properties:{tabColor:{argb:"FFC0000"}}});
// 創(chuàng)建網(wǎng)格線隱藏的表格
var sheet = workbook.addWorksheet("My Sheet", {properties: {showGridLines: false}});
// 創(chuàng)建第一行第一列凍結(jié)的表格
var sheet = workbook.addWorksheet("My Sheet", {views:[{xSplit: 1, ySplit:1}]});三、表格填充(數(shù)據(jù)寫入)
在寫入數(shù)據(jù)之前,要指定使用的工作表,可以像下面這樣操作:
// 通過表格名字(創(chuàng)建時(shí)的"My Sheet")
var worksheet = workbook.getWorksheet("My Sheet");
// 通過表格順序數(shù)(id),即第幾張表格,這里注意,exceljs不是從0開始計(jì)算,而是1。
var worksheet = workbook.getWorksheet(1);
拿到工作表之后,可以通過兩種方式將表格內(nèi)容生成:
1.worksheet.getCell("A1").value = "value";
這種方式較為靈活,可填寫任意位置的表格,利用循環(huán)嵌套等方式可生成想要的表格。
合并單元格使用: worksheet.mergeCells("I2:J2");此時(shí)合并了I2 J2兩個(gè)單元格。
2.如果數(shù)據(jù)是對(duì)象數(shù)組data=[{name:"a"},{name:"b"},{name:"c"}],也就是數(shù)據(jù)格式良好,有固定的鍵值對(duì),那么推薦這種方式:
先定好表頭
worksheet.columns = [ { header: "姓名", key: "name", width: 10 }, ];
header:參數(shù)即為在表頭里出現(xiàn)的值,key表示這列的值對(duì)應(yīng)的對(duì)象的key(本例為name),width為表格列寬。
設(shè)置表頭之后,使用addrow方法即可將數(shù)據(jù)寫入表中,如下:
for(let i =0;i四、生成xlsx文件 var filename="test.xlsx";//生成的文件名 fpath=path.join(__dirname,"../download/"+filename)//文件存放路徑 workbook.xlsx.writeFile(fpath)//將workbook生成文件 .then(function() { //文件生成成功后執(zhí)行的操作,這里是將路徑返回客戶端,你可以有自己的操作 res.send({filePath:filename}) });總結(jié)、有時(shí)候我們數(shù)據(jù)格式良好,但需要實(shí)現(xiàn)自定義表頭(表頭有合并單元格、多級(jí)表頭等),這時(shí)該怎么辦呢?
混合使用 worksheet.mergeCells()及worksheet.getCell().value
設(shè)置表頭,之后使用worksheet.columns = [ { key: "name", width: 10 }, ];注意:這里沒有header的key,如果有,將會(huì)覆蓋我們的自定義表頭內(nèi)容。
后續(xù)正常調(diào)用for(let i =0;i即可。
更多資料參閱官方文檔
如有問題可留言,互相交流解決。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107285.html
摘要:廣義的定位,涉及到瀏覽器,手機(jī)里面的用戶交互展示的內(nèi)容,都屬于前端。對(duì)自己有好處因?yàn)槎啻魏桶⒗锏拿嬖嚬龠M(jìn)行了電話面試溝通,所以這些不只是一個(gè)面試官提出的問題,而是多個(gè)面試官提出的問題。保持一個(gè)虛心學(xué)習(xí)的狀態(tài)。 介紹 狹義的來講,前端指的就是我們常說的html, css, javascript. 三者必不可缺. 而其中涵蓋的知識(shí)點(diǎn)不可一篇文章就能完整的講述出來的。廣義的定位,涉及到瀏覽器...
摘要:本期推薦文章類內(nèi)存泄漏及如何避免,由于微信不能訪問外鏈,點(diǎn)擊閱讀原文就可以啦。四種常見的內(nèi)存泄漏劃重點(diǎn)這是個(gè)考點(diǎn)意外的全局變量未定義的變量會(huì)在全局對(duì)象創(chuàng)建一個(gè)新變量,如下。因?yàn)槔习姹镜氖菬o法檢測(cè)節(jié)點(diǎn)與代碼之間的循環(huán)引用,會(huì)導(dǎo)致內(nèi)存泄漏。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開始前端進(jìn)階的第一期,本周的主題...
摘要:示例小明小明小明小明小花小花姓名價(jià)格基于上面的方法我寫了個(gè)簡(jiǎn)易的基于的自動(dòng)生成表格的插件,可以合并單元格。對(duì)于兼容這些規(guī)范,寫法也很多,希望多多指教完整代碼 事情是這樣的,我寫了一個(gè)基于jQuery的插件,在傳統(tǒng)的開發(fā)模式中,我們需要現(xiàn)在頁(yè)面引入jQuery.js,然后在引入我們的插件,我們的插件才能使用。但是隨著webpack的興起,我不在想一步步的寫入script標(biāo)簽,寫著一堆的s...
閱讀 1250·2021-11-23 09:51
閱讀 687·2021-11-19 09:40
閱讀 1353·2021-10-11 10:58
閱讀 2362·2021-09-30 09:47
閱讀 3739·2021-09-22 15:55
閱讀 2174·2021-09-03 10:49
閱讀 1265·2021-09-03 10:33
閱讀 707·2019-08-29 17:12