一诗芜、技術(shù)背景
Excel(Microsoft office)是現(xiàn)在最常用的辦公軟件,主要涉及電子表格制作埃疫、數(shù)據(jù)處理伏恐、報(bào)表輸出展示以及更高端的還有金融建模等;我們知道熔恢,在需要批處理多個(gè)Excel工作表以及工作簿的時(shí)候脐湾,需要用到一個(gè)自動(dòng)化的利器:VBA。
如果處理相對(duì)簡(jiǎn)單以及數(shù)據(jù)量不大叙淌,建議使用VBA秤掌,如果考慮產(chǎn)品版本控制愁铺,數(shù)據(jù)量過(guò)大,數(shù)據(jù)統(tǒng)計(jì)和數(shù)據(jù)分析這些問(wèn)題闻鉴,以及考慮到學(xué)習(xí)的性價(jià)比和技術(shù)的價(jià)值最大化茵乱,學(xué)習(xí)一門編程語(yǔ)言,是非常有意義的孟岛。
那么有哪些編程語(yǔ)言也可以操作Excel呢瓶竭?
(一)Go語(yǔ)言 : Excelize
Excelize 是 Go 語(yǔ)言編寫的用于操作 Office Excel 文檔基礎(chǔ)庫(kù),基于 ECMA-376渠羞,ISO/IEC 29500 國(guó)際標(biāo)準(zhǔn)斤贰。可以使用它來(lái)讀取次询、寫入由 Microsoft Excel 2007 及以上版本創(chuàng)建的電子表格文檔荧恍。支持 XLSX / XLSM / XLTM 等多種文檔格式,高度兼容帶有樣式屯吊、圖片(表)送巡、透視表、切片器等復(fù)雜組件的文檔盒卸,并提供流式讀寫 API骗爆,用于處理包含大規(guī)模數(shù)據(jù)的工作簿。
Excelize是國(guó)人編寫的基于Go語(yǔ)言的Excel庫(kù)蔽介,中文文檔相對(duì)來(lái)說(shuō)更為齊全摘投,同時(shí)Go語(yǔ)言是編譯型語(yǔ)言,編譯后只有1個(gè)運(yùn)行文件屉佳,可以方便的拷貝到其他電腦使用谷朝,同時(shí)不用安裝額外的運(yùn)行時(shí),Go語(yǔ)言還有一個(gè)優(yōu)勢(shì)就是武花,速度真的非常快杈帐。
缺點(diǎn):Go語(yǔ)言本身的錯(cuò)誤處理真的是太迷了体箕,可以看到每次對(duì)象賦值都要聲明err,然后判斷err != nil;同時(shí)在數(shù)據(jù)結(jié)構(gòu)上挑童,Go語(yǔ)言在對(duì)二維表(行列)操作時(shí)累铅,也會(huì)有一點(diǎn)繞。
結(jié)論:Excelize可以說(shuō)是國(guó)內(nèi)最好的第三方Excel操作庫(kù)站叼,雖然上手會(huì)有一點(diǎn)難度娃兽,但是在功能的豐富性和較好的運(yùn)行性能,還是值得一試的尽楔。
(二)Python : Pandas
Pandas是一個(gè)強(qiáng)大的分析結(jié)構(gòu)化數(shù)據(jù)的工具集投储;它的使用基礎(chǔ)是Numpy(提供高性能的矩陣運(yùn)算)第练,用于數(shù)據(jù)挖掘和數(shù)據(jù)分析。 Pandas中有DataFrame和Series兩個(gè)數(shù)據(jù)類型玛荞,就好像Excel的工作表和數(shù)據(jù)列(轉(zhuǎn)置后也可以看作:數(shù)據(jù)行)娇掏,這就和Excel天生契合。
缺點(diǎn):Pandas在數(shù)據(jù)處理上是非常方便的勋眯,但在文檔外操作婴梧,如批量修改工作簿名稱,就需要引入os庫(kù)客蹋;同時(shí)如果已有Excel文檔是帶格式(顏色填充塞蹭、字體設(shè)置、單元格合并等)讶坯,寫入Excel的時(shí)候就會(huì)破壞掉原來(lái)的格式番电。同時(shí),Python作為腳本語(yǔ)言闽巩,如果到其他電腦運(yùn)行钧舌,需要額外安裝運(yùn)行環(huán)境。
結(jié)論:如果純粹的處理大批量數(shù)據(jù)(十萬(wàn)級(jí)以上)涎跨,pandas自帶各類聚合函數(shù)洼冻,讓你處理起來(lái)得心應(yīng)手;同時(shí)Pandas可以結(jié)合matplotlib等第三方繪圖庫(kù)隅很,可以方便的可視化數(shù)據(jù)撞牢,如果你的數(shù)據(jù)本身可以離開Excel,如數(shù)據(jù)是從數(shù)據(jù)庫(kù)導(dǎo)入Excel叔营,那么也可以直接使用Pandas導(dǎo)入數(shù)據(jù)庫(kù)數(shù)據(jù)屋彪,然后在Pandas上進(jìn)行分析處理;Pandas底層使用numpy绒尊,在矩陣運(yùn)算中具有非常高的性能畜挥。
(三)Python : Openpyxl
openpyxl是一個(gè)用于讀取/寫入Excel2007及以上版本(即xlsx格式)文件的Python庫(kù),不論是Excel內(nèi)的特殊格式婴谱,還是單元格處理蟹但,都提供了相應(yīng)的函數(shù),與Excelize近乎相當(dāng)谭羔。
缺點(diǎn):Openpyxl不像pandas那樣华糖,底層使用numpy,所以在運(yùn)行速度上瘟裸,其實(shí)要比Excelize和pandas要慢(但是還是要比VBA要快一點(diǎn))客叉;同時(shí)也是因?yàn)镻ython作為腳本語(yǔ)言,如果要放到其他電腦運(yùn)行,需要安裝相應(yīng)的運(yùn)行環(huán)境兼搏。
結(jié)論:相對(duì)來(lái)說(shuō)卵慰,Openpyxl與VBA的應(yīng)用場(chǎng)景重合度會(huì)更高一點(diǎn),處理的思路都是比較相近的向族;Python在語(yǔ)法上呵燕,比VBA要豐富和方便的多,如果需要切換件相,學(xué)習(xí)曲線會(huì)比較平滑再扭。
(四)Python : Xlwings
xlwings也是Python操作Excel的第三方庫(kù),很大程度上就是補(bǔ)全Pandas的缺點(diǎn)夜矗,可以在方便的處理文檔本身泛范,如修改工作表名稱,將Pandas的數(shù)據(jù)處理結(jié)果調(diào)用到Excel原來(lái)的文件等紊撕。
缺點(diǎn):在功能上罢荡,如文檔格式化等相較Excelize和Openpyxl來(lái)說(shuō),還是有不少功能沒(méi)有實(shí)現(xiàn)对扶。
結(jié)論:xlwings更多的是可以作為Pandas的擴(kuò)展区赵,學(xué)習(xí)曲線和Openpyxl也比較相似。
其他
其他的還有C#的EPPlus/NPOI浪南,Java的POI笼才,easyExcel;JavaScript的exceljs等络凿,也是不錯(cuò)的Excel操作庫(kù)骡送,但學(xué)習(xí)曲線更為陡峭,應(yīng)用場(chǎng)景也更為復(fù)雜絮记。如果有一天摔踱,厭倦了VBA,但是又不想使用Go和Python怨愤,也是可以去嘗試一下的派敷。
本項(xiàng)目實(shí)戰(zhàn)中,我選擇了Python的Openpyxl模塊撰洗,有一個(gè)免費(fèi)的B站學(xué)習(xí)資料推薦給大家膀息,我就是學(xué)完這個(gè)教程后,開發(fā)了這個(gè)項(xiàng)目了赵。講解得細(xì)致易懂,還可以作為自己的代碼參考甸赃,感謝UP主路過(guò)嘅蒙面超V柿汛。
(基礎(chǔ)+鞏固)小白零基礎(chǔ)開始用Python處理Excel數(shù)據(jù)
二、項(xiàng)目任務(wù)
軍事體能考核成績(jī)?cè)u(píng)定是什么玩意呢?
每個(gè)人的體能測(cè)試有單杠络断、仰臥起坐裁替、30米x2蛇形跑、3000米跑四個(gè)項(xiàng)目貌笨,外加體型是否合格(BMI身體質(zhì)量指數(shù)或者PBF體脂百分比),每項(xiàng)原始測(cè)試數(shù)據(jù),通過(guò)不同項(xiàng)目各自規(guī)定的標(biāo)準(zhǔn)轉(zhuǎn)換成100分制的分?jǐn)?shù)怠褐,最終匯總得出個(gè)人的評(píng)定成績(jī)褂删,而且能夠批量計(jì)算。
考慮到大家日常工作中膀跌,最常用的就是用Excel登統(tǒng)計(jì)原始成績(jī)遭商,所以本項(xiàng)目采用Python+Excel的設(shè)計(jì),直接對(duì)Excel登統(tǒng)計(jì)的所有原始成績(jī)進(jìn)行處理捅伤,得到換算結(jié)果劫流,并匯總個(gè)人成績(jī)?cè)u(píng)定。
Excel登統(tǒng)計(jì)的原始成績(jī)?nèi)缦聢D:
計(jì)算結(jié)果如下圖:
三丛忆、項(xiàng)目難點(diǎn)
分性別:“男祠汇、女”,不同性別的評(píng)分標(biāo)準(zhǔn)不同熄诡,甚至考核項(xiàng)目不同可很;
分年齡:“24歲以下、25~27等”粮彤,不同年齡段根穷,評(píng)分標(biāo)準(zhǔn)不同;
分類別:“三類导坟、二類屿良、一類”,不同類別惫周,評(píng)分標(biāo)準(zhǔn)不同尘惧;
分海拔:“2000米以下,2001~2100等”递递,不同海拔喷橙,評(píng)分標(biāo)準(zhǔn)不同;
評(píng)分標(biāo)準(zhǔn)不規(guī)律登舞,不連續(xù)贰逾,是離散型的設(shè)置,查詢數(shù)據(jù)有難度菠秒。
以最復(fù)雜的高原男子3000米標(biāo)準(zhǔn)為例疙剑,海拔2001~2100米為一個(gè)標(biāo)準(zhǔn),不同年齡段標(biāo)準(zhǔn)不同,24歲以下言缤,11分42秒為100分嚼蚀,12分07秒為95分,12分22秒為90分管挟,分?jǐn)?shù)都是相差5分轿曙,但時(shí)間間隔卻是不同的25秒和15秒,不規(guī)律僻孝。而2101~2200米的標(biāo)準(zhǔn)又有變化导帝,因?yàn)楹0?101~3000米時(shí),每增加100米皮璧,標(biāo)準(zhǔn)遞增8秒舟扎。但是原始成績(jī)卻是時(shí)間段內(nèi)連續(xù)的,比如11分43秒悴务,11分44秒等睹限。
其它的考核項(xiàng)目標(biāo)準(zhǔn)相對(duì)簡(jiǎn)單一點(diǎn),在后面的文章中具體分析讯檐。
四羡疗、項(xiàng)目環(huán)境
Win7 64位深度操作系統(tǒng),正式優(yōu)化版202003:
Microsoft Office專業(yè)增強(qiáng)版2016别洪,還沒(méi)激活:
Python開發(fā)工具為PyCharm 2020.1.3社區(qū)版本:
PyCharm的項(xiàng)目解釋器為Python3.8叨恨,安裝openpyxl、pyinstaller等包:
后面的文章中挖垛,將一步步詳細(xì)介紹整個(gè)開發(fā)過(guò)程痒钝,直至項(xiàng)目完成。目前項(xiàng)目已經(jīng)完成痢毒,在試用當(dāng)中送矩,敬請(qǐng)期待!
原創(chuàng)不易哪替,有償下載栋荸,請(qǐng)多支持:
軍事體能考核成績(jī)?cè)u(píng)定系統(tǒng)下載
軍事體能考核成績(jī)?cè)u(píng)定系統(tǒng)全套Python源碼下載