当前位置: 首页 > 后端技术 > Node.js

[Node.js]写一个自动整理数据成表的脚本

时间:2023-04-03 17:53:05 Node.js

鍓嶈█鏁版嵁宓屽叆浼佷笟椤圭洰鍚庯紝闇€瑕佸皢鍩嬬偣鐨勪簨浠跺悕绉版暣鐞嗘垚Excel琛ㄦ牸锛屾柟渚跨粺璁°€傜洰鏍囨槸灏嗕笅鍥惧乏杈圭殑鏁版嵁杞崲鎴愪笅鍥惧彸杈圭殑Excel琛ㄦ牸锛氳€冭檻鍒板乏杈圭殑鍩嬬偣鏁版嵁闅忕潃椤圭洰鐨勮凯浠h€屽鍔狅紝姣忔鍩嬬偣鏁版嵁涓烘坊鍔狅紝鎴戝繀椤荤敤Ctrl+C/V灏嗘暟鎹竴涓竴涓鍒跺苟绮樿创鍒癊xcel琛ㄦ牸涓€傛垜姣旇緝鎳掞紝涓嶆兂杩欎箞鐜╋紝鎵€浠ュ啓浜嗕釜鑴氭湰锛岃嚜鍔ㄥ府鎴戞暣鐞嗘垚琛ㄦ牸銆傝剼鏈疄鐜板疄鐜拌繃绋婲ode.js鐢熸垚Excel琛ㄦ牸宸ュ叿搴撴妧鏈€夋嫨灏嗗煁鐐规暟鎹崟鐙鍒朵竴浠斤紝淇濊瘉鍏跺彉鍖栦笉浼氬奖鍝嶄笟鍔$浉鍏崇殑鍩嬬偣閫昏緫灏嗗煁鐐规暟鎹粍缁囨垚鎴戜滑闇€瑕佺殑鏁版嵁缁撴瀯鍒嗕负涓夋鎶€鏈€夋嫨鎿嶄綔Excel琛ㄦ牸鐨凬ode.js宸ュ叿搴擄細exceljsexcellentexportnode-xlsxxlsx-template鍙垪鍑轰簡浠ヤ笂鍥涚銆傞€夋嫨鐨勮搴︽湁浠ヤ笅鍑犵偣锛氬涔犳垚鏈綆锛岀畝鍗曟槗鐢ㄧ殑鏂囨。API锛屽彧鐢熸垚琛ㄦ牸灏卞浜嗭紝涓嶉渶瑕佸叾浠栧姛鑳斤紝鎵€浠PI瓒婄畝鍗曡秺濂界敓鎴怑xcel闇€瑕佺殑鏁版嵁缁撴瀯tables绠€鍗曪紝鏄撲簬瀹炵幇锛屽彲浠ュ鍑簒lsx琛ㄦ弧瓒虫渶鍩烘湰鐨勯渶姹俷ode-xlsx鏈€鎺ヨ繎涓婅堪闇€姹傦紝浣跨敤瀹冩槸棣栭€夈€俷ode-xlsx瀹樻柟鐢熸垚Excel琛ㄦ牸缁欏嚭鐨勪唬鐮佸潡锛歩mportxlsxfrom'node-xlsx';//orvarxlsx=require('node-xlsx').default;constdata=[[1,2,3],[true,false,null,'sheetjs'],['foo','bar',newDate('2014-02-19T14:30Z'),'0.3'],['baz',null,'qux'],];varbuffer=xlsx.build([{name:'mySheetName',data:data}]);//杩斿洖涓€涓敤浜庣敓鎴愯〃鏍兼暟鎹殑缂撳啿鍖篸ata鏄竴涓簩缁存暟缁勶紝瀵瑰簲琛ㄦ牸鐨勮鍜屽垪銆俤ata.length鏄〃鐨勮鏁帮紝data[0].length鏄〃鐨勫垪鏁帮紱data[0][0]瀵瑰簲琛ㄧ殑绗竴琛岀涓€鍒楃殑鍊硷紝data[0][1]瀵瑰簲琛ㄧ殑绗竴琛岀浜屽垪鐨勫€笺€傚洜姝わ紝灏嗗煁鐐规暟鎹帓鍒楁垚浜岀淮鏁扮粍鍗冲彲锛屼簩缁存暟缁勭殑鏁版嵁缁撴瀯鎺掑垪鏄撲簬瀹炵幇銆傚鍒跺煁鐐规暟鎹煁鐐规暟鎹斁鍦╞uryData.js鏂囦欢涓紝涓嶈兘闅忔剰鏇存敼锛屾墍浠ュ崟鐙鍒舵枃浠躲€俠uryData.jsexportdefault{version1:'v1.5.3',bury1:'鍙彯鎻愰啋',bury2:'瀹℃壒-绛涢€?,bury3:'浠诲姟鐐瑰嚮浠诲姟鏍囬鎵撳紑浠诲姟璇︽儏',bury4:'浠诲姟璇︽儏寮圭獥box-clickDetailstab',bury5:'浠诲姟璇︽儏寮圭獥-鐐瑰嚮鏃ュ織璁板綍tab',bury6:'浠诲姟璇︽儏寮圭獥-鐐瑰嚮宸ヤ綔鎬荤粨tab',bury7:'浠诲姟璇︽儏寮圭獥-鐐瑰嚮鍔ㄦ€乼ab',//...}buryData.js澶嶅埗鐨勬枃浠跺悕涓篵ury.js锛岃繕鏈変竴涓棶棰橈細bury.js闇€瑕佹墽琛屽畠锛屽緱鍒板畠瀵煎嚭鐨勬暟鎹璞°€傚鍑虹殑鏁版嵁浣跨敤ES6妯″潡鍖栬娉曪紝杩欓噷闇€瑕佽繘琛孍S6妯″潡鍖栬浆鎹€傝鎴愪负CommonJs妯″潡鍖栵紝璇峰皢exportdefault{}鏇挎崲涓簃odule.exports={}銆侼ode.jsfs妯″潡+姝e垯鏇挎崲鍙互杈惧埌浠ヤ笂鐩殑锛屼絾鏄负浜嗘洿蹇紝鎴戦€夋嫨浣跨敤宸ュ叿搴搈agic-stringmagic-string锛岃繖鏄竴涓搷浣滃瓧绗︿覆搴擄紝鍙互甯垜鍘绘帀鍐欑殑姝ラ瀹氭湡鏇存崲瀛楃涓层€俢onstpath=require('path');constmagicString=require('magic-string')constfs=require('fs');//buryData.js鏂囦欢璺緞constburyFile=path.join(__dirname,'../src/lib/buryData.js')constgetBuryContent=(filePath)=>{constcontent=fs.readFileSync(filePath,'utf8')//灏嗗鍑洪粯璁ゅ€兼浛鎹负module.exports=consts=newmagicString(content)s.replace('exportdefault','module.exports=')returns.toString()}(async()=>{conststr=getBuryContent(buryFile)//灏嗘浛鎹㈢殑鍐呭鍐欏叆bury.js鏂囦欢constcopyFilePath=path.join(__dirname,'/bury.js')fs.writeFileSync(copyFilePath,str)//鍔ㄦ€佸鍏ury.js鑾峰彇鍩嬬偣鏁版嵁const{default:data}=awaitimport(copyFilePath)})()鐢熸垚浜岀淮鏁扮粍涓婇潰鎻愬埌node-xlsx闇€瑕佸皢鏁版嵁鏁寸悊鎴愪簩缁存暟缁勭敓鎴愯〃鏍笺€俥xportdefault{version1:'v1.5.3',bury1:'鍙綋鎻愰啋',/...version2:'v1.5.4',bury21:'閫氳褰曚汉鍛樺垪琛?,//..}浠ヤ笂鏁版嵁鏁寸悊into:[['v1.5.3','v1.5.4'],['dingReminder','鑱旂郴浜哄垪琛?],//...]棣栧厛锛屽皢鎵€鏈夋暟鎹瓨鍌ㄥ湪涓€涓狹ap瀵硅薄涓€傚洜涓哄煁鐐规暟鎹槸涓€涓璞★紝鍏朵腑version1鍜寁ersion2浠h〃鐗堟湰鍙凤紝鐗堟湰鍙蜂細闅忕潃椤圭洰鐨勮凯浠h€屽鍔狅紝version3锛寁ersion4鈥︹€﹀皢Map鍊奸櫎浠ョ増鏈€俢onst_=require('lodash');//...constgetFormatDataMap=(data)=>{璁╃増鏈琧onstmap=newMap();_.forIn(data,(value,key)=>{if(key.includes('version')){version=value!map.has(version)&&map.set(version,[value])return}constmapValue=map.get(version)mapValue.push(value)})returnmap}(async()=>{conststr=getBuryContent(buryFile)constcopyFilePath=path.join(__dirname,'/bury.js')fs.writeFileSync(copyFilePath,str)const{default:data}=awaitimport(copyFilePath)//newconstmap=getFormatDataMap(data)})()getFormatDataMap鍑芥暟鎵ц鍚庯紝杩斿洖鏁版嵁涓猴細{'v1.5.3'=>['v1.5.3','鍙彯鎻愰啋'//...]'v1.5.4'=>['v1.5.4','ContactPersonList'//...]}鐒跺悗锛屼綘闇€瑕佺煡閬撹〃涓殑鏈€澶ц鏁帮紝浠ュ強琛ㄤ腑鐨勫垪鏁皌able鏄痬ap.size()锛屾渶澶ц鏁版槸閫氳繃鑾峰彇Map.values()鑾峰彇鎵€鏈夌殑values鍊硷紝閬嶅巻values鑾峰彇values涓瓨鍌ㄧ殑姣忎釜鏁扮粍鐨勯暱搴︼紝length鏆傛椂缁熶竴璁板綍鍦ㄥ彟涓€涓猘rraylens涓紝閬嶅巻鍚庢瘮杈僱ens涓殑鍊煎緱鍒版渶澶у€硷紝MAX_LEN涓鸿〃涓渶澶ц鏁帮紝涔熸槸闀垮害鏈€澶х殑鍊煎湪瀛樺偍鍦ㄥ€间腑鐨勬墍鏈夋暟缁勪腑銆俢onst_=require('lodash');//...constgetMergeArr=(map)=>{constvalues=_.toArray(map.values())constlens=[]//鑾峰彇闀垮害锛岄暱搴﹀€肩粺涓€瀛樺偍鍦╨ens鏁扮粍涓璮orNum:MAX_LEN})}(async()=>{conststr=getBuryContent(buryFile)constcopyFilePath=path.join(__dirname,'/bury.js')fs.writeFileSync(copyFilePath,str)const{榛樿鍊硷細鏁版嵁}=awaitimport(copyFilePath)constmap=getFormatDataMap(data)//娣诲姞consttable=getMergeArr(map)})()鏈€鍚庣敤values鍜孧AX_LEN杩涜鍙屽惊鐜€傝〃鐨勫垪鏁癿ap.size()鍙互寰楀埌锛屼絾鏄负浜嗘柟渚跨洿鎺apValue.length锛屼袱鑰呯浉绛夈€傛湁浜嗚〃鏍肩殑鍒楁暟锛屽氨鍙互鍒涘缓浜岀淮鏁扮粍鐨勭浜屽眰鏁扮粍銆俷ewArray(len).fill('')绗簩灞傛暟缁勭殑闀垮害涓簃apValue.length銆傚垱寤虹殑鏃跺€欏厛鎶婃暟缁勪腑鐨勫€肩粺涓€濉厖涓?'銆俢onstgetTargetItems=({mapValue,forNum})=>{constlen=mapValue.lengthconsttargetItems=[]mapValue.forEach((v,i)=>{for(letindex=0;index{conststr=getBuryContent(buryFile)constcopyFilePath=path.join(__dirname,'/bury.js')fs.writeFileSync(copyFilePath,str)const{榛樿鍊硷細鏁版嵁}=awaitimport(copyFilePath)constmap=getFormatDataMap(data)consttable=getMergeArr(map)//鍐欏叆鏁版嵁锛岀敓鎴愯〃锛岃繑鍥炵紦鍐插尯鏁版嵁constbuffer=xlsx.build([{name:'鍩嬬偣',data:table}])constoutPath=path.join(__dirname,'/bury.xlsx')//bury.js鏂囦欢鍙互鍒犻櫎锛屽鏋渂ury.xlsx宸茬粡瀛樺湪锛屽厛鍒犻櫎fs.existsSync(outPath)&&fs.unlinkSync(outPath)fs.existsSync(copyFilePath)&&fs.unlinkSync(copyFilePath)//鍒涘缓bury.xlsx鏂囦欢锛屽皢鑾峰彇鐨刡uffer鍐欏叆fs.writeFileSync(outPath,buffer)})()鑴氭湰瀹屾垚銆傚畬鏁存簮鐮侊細constpath=require('path');constfs=require('fs');constxlsx=require('node-xlsx');constmagicString=require('magic-string')const_=require('lodash');constburyFile=path.join(__dirname,'../src/lib/buryData.js')constgetBuryContent=(filePath)=>{constcontent=fs.readFileSync(filePath,'utf8')consts=newmagicString(content)s.replace('exportdefault','module.exports=')returns.toString()}constgetFormatDataMap=(data)=>{璁╃増鏈琧onstmap=newMap();_.forIn(data,(value,key)=>{if(key.includes('version')){version=value!map.has(version)&&map.set(version,[value])return}constmapValue=map.get(version)mapValue.push(value)})returnmap}constgetTargetItems=({mapValue,forNum})=>{constlen=mapValue.lengthconsttargetItems=[]mapValue.forEach((v,i)=>{瀵逛簬(let鎸囨暟=0;index{constvalues=_.toArray(map.values())constlens=[]values.forEach((value)=>{lens.push(value.length)})constMAX_LEN=_.max(lens)returngetTargetItems({mapValue:values,forNum:MAX_LEN})}(async()=>{conststr=getBuryContent(buryFile)constcopyFilePath=path.join(__dirname,'/bury.js')fs.writeFileSync(copyFilePath,str)const{榛樿鍊硷細鏁版嵁}=awaitimport(copyFilePath)constmap=getFormatDataMap(data)consttable=getMergeArr(map)debuggerconstbuffer=xlsx.build([{name:'鍩嬬偣',data:table}])constoutPath=path.join(__dirname,'/bury.xlsx')fs.existsSync(outPath)&&fs.unlinkSync(outPath)fs.existsSync(copyFilePath)&&fs.unlinkSync(copyFilePath)fs.writeFileSync(outPath,缂撳啿鍖?})()鍘绘帀绌鸿锛屼竴鐧捐涔嬪唴鎬荤粨浜哊ode.js鍙互浣跨敤鐨勫満鏅€傚畠涓嶄粎浠呯敤浜庢湇鍔$鎺ュ彛鐨勫紑鍙戯紝鎴戜滑杩樺彲浠ラ€氳繃缂栧啓鑴氭湰鏉ヨВ鍐崇敓娲讳腑閲嶅鎬х殑宸ヤ綔銆傚嚟鍊焜s绠€鍗曠殑璇硶鍜屽己澶х殑鐢熸€侊紝鍓嶇涓嶉渶瑕佸涔爏hell銆乸ython绛夛紝鍙敤js鏉ュ鐞嗙埇铏€佽嚜鍔ㄥ寲鑴氭湰绛夊満鏅€傚鏋滄垜鐨勬枃绔犲浣犳湁甯姪锛屼綘鐨勷煈嶅氨鏄鎴戞渶澶х殑鏀寔^_^銆?/p>