Python | 編寫一個(gè)簡(jiǎn)單的Excel處理腳本

前段時(shí)間,溫老師找我說財(cái)務(wù)處的某老師平日處理大量的Excel,很多都是機(jī)械的重復(fù)勞動(dòng),不勝其煩。和我簡(jiǎn)單說了下需求,看我能不能寫個(gè)程序幫一下忙。

需求簡(jiǎn)述如下:

? ? 一個(gè)多行多列的Excel文檔有一列為“項(xiàng)目代碼”,總共有多行各不相同數(shù)據(jù),而“項(xiàng)目代碼”這列下為無(wú)次序出現(xiàn)的重復(fù)數(shù)據(jù)。需求是將相同的“項(xiàng)目代碼”所在行的數(shù)據(jù)挑選出來(lái),并單獨(dú)生成一個(gè)以此項(xiàng)目代碼命名的sheet,在此sheet中將數(shù)據(jù)按照順序排列。

如圖

顯然這個(gè)是通過財(cái)務(wù)處網(wǎng)站導(dǎo)出的Excel,首先想到的是,應(yīng)該多設(shè)計(jì)幾個(gè)接口,直接在服務(wù)端用SQL語(yǔ)句解決這個(gè)問題。但是現(xiàn)狀是沒有設(shè)計(jì)這些功能,那么只能在這個(gè)文件上做文章。那么,首先想到的就是Python,py處理這些簡(jiǎn)單數(shù)據(jù)應(yīng)該是最便捷的。不過之前還沒有做過,需要做一些準(zhǔn)備工作。

首先確定用需要用到處理表格數(shù)據(jù)的模塊,xlrd、xlwt或者pandas,因?yàn)閜andas聽上去比較萌,這里選擇這個(gè),但是比較難受的一點(diǎn)是pandas 沒有中文文檔,有些操作想查詢需要啃英文。

我的思路是這樣的:

? ? 1.首先把Excel文件讀取到內(nèi)存中,但是文件不是固定和單一的,考慮到使用者,較簡(jiǎn)單的方式是讓用戶輸入需要處理的文件的絕對(duì)路徑。

? ? 2.獲取“項(xiàng)目代碼”這列的所有數(shù)據(jù),去重,排序,保存到一個(gè)project_code_list中。

? ? 3.循環(huán)讀取這個(gè)project_code_list中的值,比如讀到“1064801601”這個(gè)值后,遍歷內(nèi)存中的DataFrame,獲取所有項(xiàng)目代碼為“1064801601”的數(shù)據(jù),將其保存在一個(gè)新的DataFrame中。

? ? 4.同時(shí)循環(huán)在源文件里寫入新的sheet(使用project_code來(lái)命名),同時(shí)往這個(gè)sheet里寫入數(shù)據(jù)。

? ? 5.考慮用戶友好,需要寫一定的異常拋出與處理。

接下來(lái)就是編碼部分

思路確實(shí)很簡(jiǎn)單,但是需要編碼實(shí)現(xiàn),以及如何盡量寫得優(yōu)雅,又是另外一回事了。

因?yàn)槭稚线€有其他事要做,所以代碼沒有寫得很規(guī)范,異常處理也沒有寫,瑕疵比較多,但是既然功能實(shí)現(xiàn)了,也就懶得改了。


根據(jù)路徑得到DataFrame

? ? 沒有做異常處理與用戶提示,假如用戶輸入了不存在的路徑,那么程序會(huì)直接炸掉。所有這些都要注意。

獲得流寫入到指定路徑文件

? ? 沒有做異常處理。

寫入到文件

? ? 這個(gè)函數(shù)寫得很臃腫,其實(shí)應(yīng)該另外定義一個(gè)handleExcel方法來(lái)專門處理數(shù)據(jù),再用write2Excel來(lái)專門寫入,另外相同的問題也是沒有做異常處理。


主函數(shù)


最后就是考慮打包的問題,因?yàn)樨?cái)務(wù)處老師辦公室電腦上是肯定沒有Python3環(huán)境和模塊依賴的,最好直接給他一個(gè)exe可執(zhí)行文件。查了資料,這邊使用pyInstaller直接打包。

2K——22406K

下面看下運(yùn)行及處理效果



emmm

數(shù)據(jù)沒什么問題,該處理的也完成了,哎,就這樣吧。

源碼點(diǎn)擊這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容