最近遇到一个需求:解析excel,获取单元格中的颜色。说到解析excel,就不得不提SheetJSjs-xlsx,它在github上的star已经超过22k,非常强大。遗憾的是,他们有付费版,解析单元格背景色的功能不对我这样的免费用户开放。在我执着的程序(gu)面向(ge)编程下,终于找到了一个可以解决需求的节点库xlsx-populate。安装xlsx-populate不用多说,直接打开终端直接输入命令npminstallxlsx-populatestartcreatinganewexcelusingconstXlsxPopulate=require('xlsx-populate');XlsxPopulate.fromBlankAsync().then(workbook=>{workbook.sheet("Sheet1").cell("A1").value("这太棒了!");returnworkbook.toFileAsync("./out.xlsx");});解析excelconstXlsxPopulate=require('xlsx-populate');XlsxPopulate.fromFileAsync("./Book1.xlsx").then(workbook=>{constvalue=workbook.sheet("Sheet1").cell("A1").value();console.log(value);});上面只是常规操作,下面不同单元格设置为富文本constRichText=require('xlsx-Populate').RichText;constcell=workbook.sheet(0).cell('A1');cell.value(newRichText());cell.value().add('hello',{italic:true,bold:true}).add('world!',{fontColor:'FF0000'});添加超链接cell.value("LinkText").style({fontColor:"0563c1",underline:true}).hyperlink("http://example.com");获取单元格背景常量XlsxPopulate=require('xlsx-populate');XlsxPopulate.fromFileAsync("./Book1.xlsx").then(workbook=>{constbackground=workbook.sheet("Sheet1").cell("A1").style("fill");console.log(背景);});其中,style(value)有很多可选参数。样式参数比较多,可以得到基本的样式。使用分享以下是我应用xlsx-populate解析excel代码XlsxPopulate.fromFileAsync('./myFile.xlsx').then(workbook=>{varsheet=workbook.sheet(0)varrows=sheet._rows让resultData={tableHead:[],tableData:[]}让tableId=[]rows.forEach(row=>{row._cells.forEach(cell=>{让col=cell.columnNumber()让row=cell.rowNumber()if(row==1&&cell.value()){letvalue=cell.value()resultData.tableHead.push(value)}letbackgroundCR=cell.columnName()+rowletbackground=workbook.sheet("Sheet1").cell(backgroundCR).style("fill")letbgif(background){bg=background.color!=未定义?'#'+workbook.sheet("Sheet1").cell(backgroundCR).style("fill").color.rgb.substring(2):null}else{bg=null}if(tableId.indexOf(row)==-1&&row!=1){letresultDataItem=[{columnNumber:col,rowNumber:row,background:bg,value:cell.value()||“无”}]resultData.tableData.push(resultDataItem)tableId.push(row)}elseif(tableId.indexOf(row)!=-1&&row!=1){letresultDataItem={columnNumber:col,rowNumber:行,背景:bg,值:cell.value()||“无”}resultData.tableData[row-2].push(resultDataItem)}})})}).catch(error=>{console.log(error)});
