用python批量處理Excel表格,處理結果又快又好,做辦公室最靚的那個仔
阿新 • • 發佈:2020-07-12
使用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.xls
write_book.save(filename_or_stream='test.xls')
執行產生的Excel表格如下
看到這你是不是以為就結束了,當然不會大家更加方便的完成表格處理,我這邊將常見的模組,直接進行呼叫就能夠滿足常用的Excel表格資料的批量處理。
# _*_coding=utf-8_*_
import xlwt
import xlrd
class WriteExcel:
def __init__(self, sheet_name=None):
"""初始化寫表格物件
:param sheet_name: 寫表格的sheet名,預設為cainiaoxiaobai
"""
if sheet_name:
self.sheetname = sheet_name
else:
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 = filename
else:
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_name
self.sheet_id = sheet_id
else:
self.file_name = '菜鳥小白.xlsx'
self.sheet_id = 0
self.data = self.get_data()
def get_data(self):
"""讀取表格資料
:return: 返回讀取的表格資料
"""
data = xlrd.open_workbook(self.file_name)
tables = data.sheets()[self.sheet_id]
return tables
def get_lines(self):
"""讀取表格總行數
:return: 返回表格總行數
"""
tables = self.data
return tables.nrows
def get_cols(self):
"""讀取表格總行數
:return: 返回表格總列數
"""
tables = self.data
return tables.ncols
def get_value(self, row, col):
"""讀取表格中具體的行、列對應的值
:param row: 目標行
:param col: 目標列
:return: 返回目標行、列的值
"""
returnself.data.cell_value(row,col)
這個模組支援的功能和引數作用直接見程式批註。使用方法就只需新建一個主程式進行呼叫就好了。
import ReadAndWriteExcel
openexcel = 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表格的事情,就直接使用這個模組,自己建一個數據處理的主程式,一次搞定後面所有的重複工作。是不是非常地簡單呢?