使用python批量處理Excel數據
-
讓你根據Excel上所有人的身份證號碼,提取出公司員工的生日
-
讓你每個月都將公司所有人的考勤數據整理一下
類似這樣的格式化的重復操作,你還在每次都使用的人工去逐條查詢處理么?下次再遇到這種情況,請一定不要再傻傻地每次都手動查詢處理。可以快速整理出一個python腳本來批量處理Excel數據,周期性處理的數據更是一了百了哦。
首先我們需要安裝一個xlrd和xlwt的python,其中xlrd是用來讀取Excel表格數據,xlwt是用來寫Excel表格數據的。具體python安裝可以參考python學習三——庫安裝。
xlrd
首先我們學習一下Excel表格讀寫庫——xlrd
-
打開excel文件並獲取所有sheet
import xlrd# 打開Excel文件讀取數據data = xlrd.open_workbook('聯系人.xls')sheet_name = data.sheet_names() # 獲取所有sheet名稱print(sheet_name) # ['sheet1', 'sheet2']
-
根據sheet索引或者名稱獲取sheet內容,同時獲取sheet名稱、行數、列數
# 根據sheet索引或者名稱獲取sheet內容,同時獲取sheet名稱、列數、行數sheet2 = data.sheet_by_index(1)print('sheet2名稱:{}\nsheet2列數: {}\nsheet2行數: {}'.format(sheet2.name, sheet2.ncols, sheet2.nrows))# sheet2名稱:sheet2# sheet2列數: 7# sheet2行數: 5
-
獲取指定單元格的內容
# 獲取指定單元格的內容print(sheet1.cell(1,0).value) # 第2 行1列內容:機構名稱print(sheet1.cell_value(1,0)) # 第2 行1列內容:機構名稱print(sheet1.row(1)[0].value) # 第2 行1列內容:機構名稱
xlwt
接下來我們我們在看看xlwt,其實兩個庫的使用方法都是差不多的。具體代碼如下:
import xlwt#創建一個Excel對象write_book = xlwt.Workbook()#在對象中添加一個sheet1表write_sheet = xlwt.Workbook.add_sheet(write_book,sheetname='cainiaoxiaobai')#在第二行第三列的單元格插入數據(默認從0開始計數)write_sheet.write(1,2,"菜鳥小白的學習分享")#保存Excel對象為test.xlswrite_book.save(filename_or_stream='test.xls')
運行產生的Excel表格如下

看到這你是不是以為就結束了,當然不會大家更加方便的完成表格處理,我這邊將常見的模塊,直接進行調用就能夠滿足常用的Excel表格數據的批量處理。
# _*_coding=utf-8_*_import xlwtimport xlrdclass WriteExcel:def __init__(self, sheet_name=None):"""初始化寫表格對象:param sheet_name: 寫表格的sheet名,默認為cainiaoxiaobai"""if sheet_name:self.sheetname = sheet_nameelse:self.sheetname = "cainiaoxiaobai"self.workbook = xlwt.Workbook()self.worksheet = self.workbook.add_sheet(sheetname=self.sheetname)def write_values(self, row, col, values):"""向目標sheet的某個行列寫入值:param row: 目標行:param col: 目標列:param values: 想要寫入的值"""self.worksheet.write(row, col, values)def save_file(self, filename=None):"""保存表格:param filename: 保存的文件名"""if filename:self.filename = filenameelse:self.filename = "菜鳥小白的學習分享.xls"self.workbook.save(self.filename)class OpenExcel:def __init__(self, file_name=None, sheet_id=None):"""初始化讀取Excel表格:param file_name: 需要讀取的表格名:param sheet_id: 需要讀取的表格sheet"""if file_name:self.file_name = file_nameself.sheet_id = sheet_idelse:self.file_name = '菜鳥小白.xlsx'self.sheet_id = 0self.data = self.get_data()def get_data(self):"""讀取表格數據:return: 返回讀取的表格數據"""data = xlrd.open_workbook(self.file_name)tables = data.sheets()[self.sheet_id]return tablesdef get_lines(self):"""讀取表格總行數:return: 返回表格總行數"""tables = self.datareturn tables.nrowsdef get_cols(self):"""讀取表格總行數:return: 返回表格總列數"""tables = self.datareturn tables.ncolsdef get_value(self, row, col):"""讀取表格中具體的行、列對應的值:param row: 目標行:param col: 目標列:return: 返回目標行、列的值"""return self.data.cell_value(row, col)
這個模塊支持的功能和參數作用直接見程序批注。使用方法就只需新建一個主程序進行調用就好了。
import ReadAndWriteExcelopenexcel = ReadAndWriteExcel.OpenExcel(file_name="菜鳥小白.xls",sheet_id=0)write_excel = ReadAndWriteExcel.WriteExcel()for i in range(1,openexcel.get_lines()):#將目標表格的姓名拷貝在整理的表格中write_excel.write_values(i, 0, openexcel.get_value(i,0))#將身份證號碼中的生日提取出來birthday = openexcel.get_value(i,1)[6:13]#將生日寫入到目標表格中write_excel.write_values(i,1,birthday)write_excel.save_file(filename="菜鳥小白的學習分享.xls")
實現效果如下:

后面你們在遇到需要反復批量處理Excel表格的事情,就直接使用這個模塊,自己建一個數據處理的主程序,一次搞定后面所有的重復工作。是不是非常地簡單呢?
