使用 Python 合并多個(gè)格式一致的 Excel 文件(推薦)
一 問(wèn)題描述
最近朋友在工作中遇到這樣一個(gè)問(wèn)題,她每天都要處理如下一批 Excel 表格:每個(gè)表格的都只有一個(gè) sheet,表格的前兩行為表格標(biāo)題及表頭,表格的最后一行是相關(guān)人員簽字。最終目標(biāo)是將每個(gè)表格的內(nèi)容合并到一個(gè) Excel 表格中,使之成為一張表格。在她未咨詢我之前,每天復(fù)制粘貼這一類操作占用了她絕大部分時(shí)間。表格樣式如下:
二 需求分析
根據(jù)她的描述,最終需求應(yīng)該是這樣的:在這一批表格中選取任意一個(gè)表格的前兩行作為新表格的標(biāo)題與表頭,將這兩行內(nèi)容以嵌套列表的形式插入一個(gè)名為 data 空列表中。取每張表格的第3至倒數(shù)第二行,剔除空白行的內(nèi)容。并將所有表格的內(nèi)容以子列表的方式依次插入 data 列表中。任取一表格的最后一行以子列表的方式插入 data 列表中。最后將 data 列表的內(nèi)容寫入一個(gè)新的 Excel 表格中。
三 查閱資料
通過(guò)幾分鐘的上網(wǎng)查詢,得出以下結(jié)論:
3.1 通過(guò) xlrd 和 xlsxwriter 模塊即可解決次需求;
3.2 之所以使用 xlrd 和 xlsxwriter 是因?yàn)椋?xlrd擅長(zhǎng)讀取 Excel 文件,不適合寫入,用 xlsxwriter 來(lái)進(jìn)行大規(guī)模寫入 Excel 表格不會(huì)出現(xiàn)報(bào)錯(cuò)。
四 編碼
一切以解決當(dāng)前問(wèn)題為向?qū)Вf(shuō)干就干。 coding … …
# -*- coding:utf-8 -*- import os, xlrd, xlsxwriter source_dir = r'input' new_execl = "All in one.xlsx" raw_excels = os.listdir(source_dir) keyword = "油站經(jīng)理" # 除包括此關(guān)鍵字的行均插入 data = [] filename = os.path.join(source_dir, raw_excels[0]) wb = xlrd.open_workbook(filename) sheet = wb.sheets()[0] data.append(sheet.row_values(0)) data.append(sheet.row_values(1)) for excel in raw_excels: filename = os.path.join(source_dir, excel) wb = xlrd.open_workbook(filename) sheet = wb.sheets()[0] for row_num in range(2, sheet.nrows): row_values = [str(i) for i in sheet.row_values(row_num)] if len(''.join(row_values)) and (keyword not in ''.join(row_values)): data.append(sheet.row_values(row_num)) data.append(sheet.row_values(sheet.nrows-1)) new_wb = xlsxwriter.Workbook(new_execl) worksheet = new_wb.add_worksheet() font = new_wb.add_format({"font_size":11}) for i in range(len(data)): for j in range(len(data[i])): worksheet.write(i, j, data[i][j], font) new_wb.close()
半小時(shí)后,大功告成!
五 使用說(shuō)明
5.1 下載安裝 Python3.X(具體安裝步驟自己查一下);
5.2 安裝 xlrd 和 xlsxwriter 模塊,參考命令: pip install xlrd xlsxwriter。開始此步驟之前可能需要先升級(jí)pip,具體升級(jí)命令系統(tǒng)會(huì)提示,復(fù)制粘貼即可;
5.3 新建一個(gè)名為 input 的文件夾,將需要合并的文件復(fù)制到這個(gè)文件夾下;
5.4 把以上代碼復(fù)制以 excels_merge.py 的文件名保存在與 input 文件夾同級(jí)別的文件夾中,雙擊鼠標(biāo)稍后即可。如果沒有關(guān)聯(lián)打開方式,那么就在資源管理器的地址欄輸入“cmd”,在打開的命令窗口輸入:python excels_merge.py。生成的 All in one.xlsx 即為合并后的新 Excel 文件。
六 總結(jié)
6.1 [str(i) for i in sheet.row_values(row_num)]這一部分代碼實(shí)現(xiàn)了將列表內(nèi)的元素統(tǒng)一轉(zhuǎn)化為字符串,主要是為了下一行代碼實(shí)現(xiàn)將列表轉(zhuǎn)換為字符串;
6.3 此的腳本不對(duì)源 Excel 文件進(jìn)行任何操作,可是放心使用;
6.4 以上腳本就是隨手一寫,都沒有優(yōu)化,以后如果數(shù)據(jù)量太大估計(jì)會(huì)考慮優(yōu)化,希望大家多提意見或建議;
6.5 源代碼可以訪問(wèn)我的同名 CSDN 博客及 GitHub 獲取。
總結(jié)
以上所述是小編給大家介紹的使用 Python 合并多個(gè)格式一致的 Excel 文件,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
Python自動(dòng)化完成tb喵幣任務(wù)的操作方法
2019雙十一,tb推出了新的活動(dòng),商店喵幣,看了一下每天都有幾個(gè)任務(wù)來(lái)領(lǐng)取喵幣,從而升級(jí)店鋪賺錢,然而我既想賺紅包又不想干苦力,遂使用python來(lái)進(jìn)行手機(jī)自動(dòng)化操作,需要的朋友跟隨小編一起看看吧2019-10-1030行Python代碼實(shí)現(xiàn)高分辨率圖像導(dǎo)航的方法
這篇文章主要介紹了30行Python代碼實(shí)現(xiàn)高分辨率圖像導(dǎo)航的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05python實(shí)現(xiàn)動(dòng)態(tài)GIF英數(shù)驗(yàn)證碼識(shí)別示例
這篇文章主要為大家介紹了python實(shí)現(xiàn)動(dòng)態(tài)GIF英數(shù)驗(yàn)證碼識(shí)別示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01