1. 程式人生 > 實用技巧 >用python批量處理Excel表格,處理結果又快又好,做辦公室最靚的那個仔

用python批量處理Excel表格,處理結果又快又好,做辦公室最靚的那個仔

使用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_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 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表格的事情,就直接使用這個模組,自己建一個數據處理的主程式,一次搞定後面所有的重複工作。是不是非常地簡單呢?