一文詳解Python3處理Excel文件


最近工作中需要統計APP線上終端用戶 手機品牌手機型號對應型號的用戶量,並生成Excel表格匯報項目組。因線上手機品牌、型號數量過於龐大,手動操作過於消耗時間,所以搞了一個 python3 的腳本來生成所需要的表格。

用 python3 操作Excel,第一件事是找可使用的依賴庫,之前在網上找了一個 python3 依賴庫的優劣對比圖:
Excel 處理相關依賴包優劣對比

我選擇的依賴庫是openpyxl,因為我的需求是:

  • 可以讀寫xlsx 新版本的Excel文件;
  • 面對大文件的讀寫:速度夠快;
  • 除讀寫xlsx 外,具備以下功能:
    設置行高、列寬、文字大小、表格邊框、合並單元格等

因為之前也嘗試過 xlrd等其他依賴庫,所以這篇文章我會將openpyxlxlrd的API使用方式均進行介紹,算是做一個學習筆記:

  • python3使用openpyxl操作xlsx表格;
  • python3使用xlrd操作xls表格;

一、openpyxl

這里對 python3 使用 openpyxl操作xlsx的相關代碼片段做如下總結:

  • 使用 openpyxl 讀取 xlsx 文件;
  • 使用 openpyxlxlsx 文件;

1.1 讀 xlsx 文件

  • 打開Excelxlsx文件,並讀取sheet頁:
import openpyxl  # 導入模塊openpyxl

# 打開Excel表格
excel = openpyxl.load_workbook('refer/品牌型號映射表.xlsx')
# 獲取指定Sheet表單頁
sheet = refer_excel['品牌型號對應關系']
  • 讀取單元格cell內容:讀取第一行第一列的單元格內容;
import openpyxl  # 導入模塊openpyxl

# 讀取第一行第一列的單元格內容
cell_value = (sheet.cell(row=1, column=1)).value

讀取Excel 可運行代碼舉例:

使用 openpyxl 讀取Excelxlsx文件,舉例代碼如下:

這里要讀取的舉例Excel表格如下:
要讀取的Excel表格

代碼舉例如下:

import openpyxl  # 導入模塊openpyxl


def get_brand_model_dict_from_refer():
    """ 讀取xlsx文件,獲取xlsx文件中"品牌"、"型號"映射字典
    """
    # 打開Excel表格
    refer_excel = openpyxl.load_workbook('refer/品牌型號映射表.xlsx')
    # 獲取指定Sheet表單頁
    refer_sheet = refer_excel['品牌型號對應關系']
    # 創建字典:創建一個以型號為key,以品牌為value的字典
    brand_model_dict = {}
    # 行循環:從第二行開始循環,到最后一行截止
    for row in range(2, refer_sheet.max_row + 1):
        # 讀取cell單元格中的數據
        brand = (refer_sheet.cell(row=row, column=1)).value  # 品牌
        model = (refer_sheet.cell(row=row, column=2)).value  # 型號
        # 以型號為key 以品牌為value
        brand_model_dict[model] = brand
    print("return brand_model_dict: ", brand_model_dict)
    return brand_model_dict


# ~~~~~~~~~~~~~~~~main~~~~~~~~~~~~~~~~~~
# 讀取對應關系表格:
get_brand_model_dict_from_refer()

1.2 寫 xlsx 文件

  • 新建Excel創建Sheet頁:
# 創建輸出表格Excel:創建工作表  
excel = openpyxl.Workbook()  
# 創建sheet頁:以demo為名字創建一個sheet頁  
sheet = excel.create_sheet('demo_sheet', 0)
  • 設置Excel中表格的行高
# 第一行的行高
sheet.row_dimensions[1].height = 22
  • 設置Excel中表格的列寬
# 設置A列的列寬
sheet.column_dimensions['A'].width = 25
  • 單元格賦值
# 第一行第一列的單元格  
cell11 = sheet.cell(row=1, column=1)
# 單元格賦值
cell11.value = "demo table title" 
  • 單元格內容居中對齊
# 居中對齊
cell11.alignment = openpyxl.styles.Alignment(horizontal='center', vertical='center')  
  • 合並單元格
# 合並單元格:合並第一行,1~3列的單元格  
sheet.merge_cells(start_row=1, start_column=1, end_row=1, end_column=3)
  • 保存Excel到指定目錄:
# 保存excel文件 
excel.save('output/demo_excel.xlsx')

完整的代碼實現舉例:

import os  # 文件相關判斷會用到
import openpyxl  # 導入模塊openpyxl

#
# ~~~~~~~~寫~~~~~~~~
# 創建輸出表格Excel:創建工作表
output_excel = openpyxl.Workbook()
# 創建sheet頁:以demo為名字創建一個sheet頁
output_sheet = output_excel.create_sheet('demo_sheet', 0)
#
# 行高:第一行行高 22
output_sheet.row_dimensions[1].height = 22
# 列寬:列寬 25 (A、B、C) 三列寬度為 25
column_width_list = ['A', 'B', 'C']
for columnKey in column_width_list:
    output_sheet.column_dimensions[columnKey].width = 25
#
# 設置第一行顯示內容:第一行為表格的標題,需合並單元格
cell11 = output_sheet.cell(row=1, column=1)  # 第一行第一列的單元格
cell11.value = "demo table title"  # 單元格賦值
cell11.alignment = openpyxl.styles.Alignment(horizontal='center', vertical='center')  # 居中對齊
# 合並單元格
output_sheet.merge_cells(start_row=1, start_column=1, end_row=1, end_column=3)
#
# 設置第二行顯示內容:第二行為 品牌、型號、數量
md_cell21 = output_sheet.cell(row=2, column=1)  # 單元格
md_cell21.value = '品牌'  # 賦值
md_cell21.alignment = openpyxl.styles.Alignment(horizontal='center', vertical='center')  # 居中
md_cell21 = output_sheet.cell(row=2, column=2)  # 單元格
md_cell21.value = '型號'  # 賦值
md_cell21.alignment = openpyxl.styles.Alignment(horizontal='center', vertical='center')  # 居中
md_cell21 = output_sheet.cell(row=2, column=3)  # 單元格
md_cell21.value = '數量'  # 賦值
md_cell21.alignment = openpyxl.styles.Alignment(horizontal='center', vertical='center')  # 居中
# 保存表格
# 如果存在已有的輸出文件:則刪除文件
if os.path.exists('output/demo_excel.xlsx'):
    os.remove('output/demo_excel.xlsx')
# 保存輸出文件
output_excel.save('output/demo_excel.xlsx')

生成的Excel文件如圖所示:
生成的Excel文件如圖所示

二、xlrd

這里對 python3 使用 xlrd操作xls的相關代碼片段做如下總結:

  • 使用 xlrd 讀取 xls 文件;
  • 使用 xlutils.copyxls 文件;

2.1 讀 xls 文件

  • 打開Excelxls文件,並讀取sheet頁:
import xlrd  # 讀取excel

# 打開Excel表格
excel = xlrd.open_workbook('input/品牌型號映射表.xls')
# 獲取指定Sheet表單頁
sheet = excel.sheet_by_index(0)
  • 讀取單元格cell內容:讀取第一行第一列的單元格內容;
import xlrd  # 讀取excel

# 讀取第一行第一列的單元格內容
value = sheet.cell_value(0, 0)  # 品牌

讀取 Excel 可運行代碼舉例:

使用 xlrd 讀取Excelxls文件,舉例代碼如下:

這里要讀取的舉例Excel表格如下:
要讀取的Excel表格

代碼舉例如下:

import xlrd # 讀取excel


def get_brand_model_dict_from_refer():
    """ 讀取xlsx文件,獲取xlsx文件中"品牌"、"型號"映射字典
    """
    # 打開Excel表格
    excel = xlrd.open_workbook('input/品牌型號映射表.xls')
    # 獲取指定Sheet表單頁
    sheet = excel.sheet_by_index(0)
    # 創建字典:創建一個以型號為key,以品牌為value的字典
    brand_model_dict = {}
    # 行循環:從第二行開始循環,到最后一行截止
    for row in range(1, sheet.nrows):
        # 讀取cell單元格中的數據
        brand = sheet.cell_value(row, 0)  # 品牌
        model = sheet.cell_value(row, 1)  # 型號
        # 以型號為key 以品牌為value
        brand_model_dict[model] = brand
    print("return brand_model_dict: ", brand_model_dict)
    return brand_model_dict


# ~~~~~~~~~~~~~~~~main~~~~~~~~~~~~~~~~~~
# 讀取對應關系表格:
get_brand_model_dict_from_refer()


2.2 使用 xlutils.copy 寫 xls 文件

因 xlrd 無更改Excel的功能,這里使用 xlutils.copy 創建一個新的Excel。

  • 創建Excel
# 因 xlrd 無更改Excel的功能,這里使用 xlutils.copy 創建一個新的Excel  
excel = copy(input_excel)  
sheet = output_excel.get_sheet(0)
  • 單元格賦值
# 為單元格賦值  
sheet.write(row, column, cell_value)

使用 xlutils.copy 寫 Excel 可運行代碼舉例:

import xlrd  # 讀取excel  
# 導入copy模塊  
from xlutils.copy import copy  
  
#  
# ~~~~~~~~讀~~~~~~~~  
# 打開Excel表格  
input_excel = xlrd.open_workbook('input/品牌型號映射表.xls')  
# 獲取指定Sheet表單頁  
input_sheet = input_excel.sheet_by_index(0)  
#  
# ~~~~~~~~寫~~~~~~~~  
# 因 xlrd 無更改Excel的功能,這里使用 xlutils.copy 創建一個新的Excel  
output_excel = copy(input_excel)  
output_sheet = output_excel.get_sheet(0)  
# 行循環(參考文件)  
for row in range(input_sheet.nrows):  
    # 忽略第0行  
 if row == 0:  
        output_sheet.write(row, 2, '行號')  
    else:  
        # 修改:第row行 第2列的內容  
 output_sheet.write(row, 2, row)  
# 保存更改后的文件  
output_excel.save('output/demo_excel.xls')

生成的Excel文件如圖所示

三、源碼下載

給出源碼之前,先說一下我的編譯器環境:

  • 環境:python 3.8
  • 編譯器:PyCharm

源碼下載:

Python3使用openpyxl、xlrd依賴庫操作Excel案例源碼:
https://download.csdn.net/download/aiwusheng/85140982

Python3使用xlrd修改Excel數據映射關系:
https://download.csdn.net/download/aiwusheng/85066595

參考:

Python開發 之 Python3讀寫Excel文件:
https://blog.csdn.net/u014597198/article/details/83104653

= THE END =

文章首發於公眾號”CODING技術小館“,如果文章對您有幫助,歡迎關注我的公眾號。

歡迎關注我的公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM