openpyxl python操作Excel表格,


這里openpyxl只支持xlsx格式的Excel,openpyxl使用起來會更方便一些,所以如果只操作小流水線文件的話,那么可以優先選擇openpyxl,如果要兼容xls的話,就使用xlrd/xlwt

openpyxl的安裝

pip install openpyxl
# 如果Excel里面有圖片(JPEG,png,...)需要安裝圖片處理模塊
pip install pillow

Excel的寫

基本用法

from openpyxl import Workbook
wb = Workbook()
wb0 = wb.create_sheet("user")  # 默認從后面插入一個工作表
wb1 = wb.create_sheet("user", 0) # 第一個
wb2 = wb.create_sheet("商品", 0)
wb3 = wb.create_sheet("價格", 0)
wb1.title = "用戶表"   # 修改工作簿的名稱
wb.save("xb.xlsx")  # 保存

print(wb.sheetnames) # 獲取所有工作簿的名稱

 獲取其中一個工作簿的名稱

for sheet in wb:
    print(sheet)
print(wb['用戶表'])

Excel寫數據

wb1['A4'] = 4 # 這將返回A4處的單元格,如果上不存在,則創建一個單元格,值可以直接分配
wb1.cell(row=4, column=2, value=10) # 也可以通過cell來進行寫入,通過行數和列數來找到單元格所在的位置 

簡單的求和

wb1['A1'] = 1
wb1['A2'] = 2
wb1['A3'] = '=sum(A1:A2)'
wb.save('xb.xlsx')

 

添加一行內容

l = ["姓名", "性別", "年齡", "愛好"]
wb1.append(l)
wb.save()

 

Excel的讀

from openpyxl import load_workbook # 導入模塊
wb = load_workbook(filename='xb.xlsx') # 打開文件,默認可讀寫,若有需要可以指定write_onle和read_only為True
sheet = wb['用戶表'] # 找到工作表
print(sheet['A4'].value) # 輸出內容

# 在B9處寫入平均值

sheet["B9"] = '=AVERAGE(B2:B8)'

wb.save('xb.xlsx')

 

如果是讀取的時候就需要加上data_only=True,這樣讀到B9返回的就是數字,如果不加這個參數返回的就是公式本身.

獲取行和列

sheet.row為生成器,里面是每一行數據,每一行又由一個tuple包裹

sheet.columns類似,不過里面是每一個tuple是每一列的單元格

# 因為按行,所以返回A1, B1, C1這樣的順序
for row in sheet.rows:
    for cell in row:
        print(cell.value)

# A1, A2, A3這樣的順序
for column in sheet.columns:
    for cell in column:
        print(cell.value)

 

以上代碼就可以獲得所有單元格的數據,如果要獲得某行的數據,給其一個索引就行了,因為sheet.rows是生成器類型,不能使用索引,轉換成list之后再使用索引,list(sheet.rows)[2]這樣就獲取到第三行的tuple對象.

for cell in list(sheet.rows)[2]:
    print(cell.value)

 

如何獲得任意起見的單元格

可以使用range函數,下面的寫法,獲得了一A1為左上角,B3為右下角矩形區域的所有單元格,注意range從1開始的,因為openpyxl中為了Excel中的表達方式一致,並不和編程語言的習慣以0表示第一個值.

for i in range(1, 4):
    for j in range(1, 3):
        print(sheet.cell(row=i, column=j).value)

# out
None
None
None
None
None
None

還可以像使用切片那樣使用。sheet['A1':'B3']返回一個tuple,該元組內部還是元組,由每行的單元格構成一個元組

for row_cell in sheet_ranges['A1':'B3']:
    for cell in row_cell:
        print(cell)

 

設置單元格風格--style

先導入需要的類

from openpyxl.styles import Font, colors, Alignment

 

分別可指定字體相關,顏色,和對齊方式。

字體

bold_itatic_24_font = Font(name='等線', size=24, italic=True, color=colors.RED, bold=True)

sheet['A1'].font = bold_itatic_24_font

對齊方式

也是直接使用cell的屬性aligment,這里指定垂直居中和水平居中。除了center,還可以使用right、left等等參數。

# 設置B1中的數據垂直居中和水平居中
sheet['B1'].alignment = Alignment(horizontal='center', vertical='center')

設置行高和列寬
有時候數據太長顯示不完,就需要拉長拉高單元格。

# 第2行行高
sheet.row_dimensions[2].height = 40
# C列列寬
sheet.column_dimensions['C'].width = 30

 

合並和拆分單元格

所謂合並單元格,即以合並區域的左上角的那個單元格為基准,覆蓋其他單元格使之稱為一個大的單元格。
相反,拆分單元格后將這個大單元格的值返回到原來的左上角位置。

# 合並單元格, 往左上角寫入數據即可
sheet.merge_cells('B1:G1') # 合並一行中的幾個單元格
sheet.merge_cells('A1:C3') # 合並一個矩形區域中的單元格

合並后只可以往左上角寫入數據,也就是區間中:左邊的坐標。
如果這些要合並的單元格都有數據,只會保留左上角的數據,其他則丟棄。換句話說若合並前不是在左上角寫入數據,合並后單元格中不會有數據。
以下是拆分單元格的代碼。拆分后,值回到A1位置

sheet.unmerge_cells('A1:C3')

 


免責聲明!

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



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