openpyxl 學習筆記


一、簡介

openpyxl 是一個用於處理 xlsx 格式Excel表格文件的第三方python庫,其支持Excel表格絕大多數基本操作。

 安裝方法

pip/pip3 install openpyxl

二、Excel表格術語

列  column,以大寫字母表示,如A,B
row,以數字表示,從1開始
格式(方塊) cell
工作表 sheet

 

三、表格讀取操作

 1.打開一個已存在的表格,獲取表格文件內所有sheet名稱

import openpyxl
from openpyxl import load_workbook  #load_workbook 只能打開已經存在的表格,不能創建新表格
filename = "阿里雲天池電商嬰兒用戶數據.xlsx"
work_book = load_workbook(filename=filename)
print(work_book.sheetnames)  #打印表格中所有的sheet名稱

2.打開一個sheet表並獲取sheet表大小

sheet = work_book['(sample)sam_tianchi_mum_baby_tr']   # 方式一  指定sheet名稱
sheet = work_book.active                               # 方式二  使用active屬性,表示當前活躍的或者唯一的sheet
print(sheet.dimensions)  # 打印sheet尺寸大小  A1:G1002  從A1到G1,共1002行 

3.獲取指定格子的內容

cell = sheet['A1']                  # 方式一 通過cell坐標,A1表示格子的坐標
cell = sheet.cell(row=1,column=1)   # 方式二 通過指定行和列
print(cell.value, cell.row, cell.column, cell.coordinate) # 打印格子 內容 行數 列數 坐標

4. 獲取多個格子的內容

cells = sheet['A1:A5'] 
print(cells)
for cell in cells:
	print(cell[0].value)
	print(cell[0].row)
	print(cell[0].column)

5.獲取整列、整行、多列、多行格子

cells = sheet['A']      # 獲取指定列所有格子,如A列所有格子 
cells = sheet['A:C']    # 獲取指A列到G列所有格子
cells = sheet[1]        # 獲取第一行所有格子
cells = sheet[1:5]     # 獲取第一行到第五行所有格子

6.指定行和列的范圍,按行獲取

# 起始行數 2 結束行數 3 起始列 1(A) 結束列 2(B)
for row in sheet.iter_rows(min_row=2,max_row=3,min_col=1,max_col=2):
    print(row) # A2,B2  A3,B3

7.指定行和列的范圍,按列獲取

# 起始行數 2 結束行數 3 起始列 1(A) 結束列 2(B)
for col in sheet.iter_cols(min_row=2,max_row=3,min_col=1,max_col=2):
    print(col) # A2,A3  B2,B3

8.獲取所有的行

for row in sheet.rows:
    print(row)

9.獲取所有的列

for col in sheet.columns:
    print(col) 

四、表格寫入、修改、刪除操作  

初始化

import openpyxl
from openpyxl import load_workbook  #load_workbook 只能打開已經存在的表格,不能創建新表格
filename = "阿里雲天池電商嬰兒用戶數據.xlsx"
work_book = load_workbook(filename=filename)
sheet = work_book.active  

1.向某個格子(cell)寫入內容並保存  

# 通過sheet實例寫入
sheet['A1'] = '這是測試寫入'
work_book.save(filename=filename)  #也可以是其他表格

# 通過cell實例寫入
cell = sheet['A1']
cell.value = '這是測試寫入'
work_book.save(filename=filename)

2.使用python列表批量插入數據

data = [
	['a',1],
	['b',2],
	['c',3],
	['d',4]
]

for row in data:
	sheet.append(row)
work_book.save(filename=filename)

3.直接賦值公式字符串

from openpyxl.utils import FORMULAE
print(FORMULAE)  # 打印所有支持直接賦值的公式

sheet['F1002'] = '=AVERAGE(F2:F1001)' #對F列進行評價計算
work_book.save(filename=filename)

4.插入一列和插入多列  

# 插入一列
sheet.insert_cols(idx=2)  #在第2列的左邊插入1個空列
work_book.save(filename=filename)

# 插入多列
sheet.insert_cols(idx=2,amount=3)  #在第2列的左邊插入3個空列
work_book.save(filename=filename)

5.插入一行和插入多行  

# 插入一行
sheet.insert_rows(idx=2)  #在第2行的上面插入1行
work_book.save(filename=filename)

# 插入多行
sheet.insert_rows(idx=2,amount=3)  #在第2行的上面插入3行
work_book.save(filename=filename)

6.刪除一列和刪除多列

# 刪除一列
sheet.delete_cols(idx=2) #刪除第2列
work_book.save(filename=filename)


# 刪除多列
sheet.delete_cols(idx=2,amount=3) #從第2列開始刪除3列 即 2 3 4 列
work_book.save(filename=filename) 

7.刪除一行和刪除多行  

# 刪除一行
sheet.delete_rows(idx=2) #刪除第2行
work_book.save(filename=filename)

# 刪除多行
sheet.delete_rows(idx=2,amount=3) #從第2行開始刪除3行 即 2 3 4 行
work_book.save(filename=filename)

8.移動格子

# 將 C1和D4直接的格子 向下 2行 向左2行   正整數時 row下 col為左,反之 row為上 col為右
sheet.move_range("C1:D4",rows=2,cols=-2)
work_book.save(filename=filename)

9.創建新sheet

work_book.create_sheet("表格2")
work_book.save(filename=filename)

10.刪除sheet

work_book.remove("表格2")
work_book.save(filename=filename

11.復制一個sheet

work_book.copy_worksheet(sheet)
work_book.save(filename=filename) #新sheet名稱為 原sheet名稱+ ' Copy' 注意有空格

12.修改sheet名稱

sheet.title = "表格3"
work_book.save(filename=filename)

13.凍結窗格  

sheet.freeze_panes= "G2" #凍結G列第2行  左右移動時 G列之前凍結  上下滾動第1行凍結,不包括第2行
work_book.save(filename=filename)

14.添加篩選

sheet.auto_filter.ref = sheet.dimensions  # 對整張表格都篩選,執行結果第一行所有列都有篩選下拉選項
work_book.save(filename=filename) 

五、修改表格樣式

1.修改字體樣式

# Font(name=字體名稱, size=字體大小, bold=是否加粗, italic=是否斜體,color=字體顏色)
from openpyxl.styles import Font
cell = sheet['A1']
font = Font(name = "宋體 Regular",zize=12, bold=True, italic=True,color='FF000000')   
cell.font = font
work_book.save(filename=filename)

2.獲取表格中字體的樣式

#cell.font.屬性 
workbook = load_workbook( filename '這是一個表格.xlsx ')sheet = workbook.active
cell = sheet[ 'A2']
font = cell.font
print(font.name,font.size,font.bold, font.italic)

3.設置對齊樣式

# Alignment(horizontal=水平對齊模式, vertical=垂直對齊模式, text_rotation=旋轉角度, wrap_text=是否自動換行)
# 水平對齊樣式  distributed justify  center left fill centerContinuous right general
# 垂直對齊樣式  bottom distributed justify  center top
cell.alignment = alignment
from openpyxl.styles import Alignment
cell = sheet['A1']
alignment = Alignment(horizontal='center',vertical='center',text_rotation=45,warp_text=True)  
work_book.save(filename=filename)

4.設置邊框樣式

from  openpyxl.styles import Side,Border
cell = sheet['A1']
side1 = Side(style='thin',color='FF000000')
side2 = Side(style='dotted',color='FFFF0000')
border = Border(left=side1,right=side1,top=side2,bottom=side2)


cell.border = border
work_book.save(filename=filename)

5.設置填充樣式

from openpyxl.styles import PatternFill,GradientFill
from openpyxl import load_workbook   
 
workbook = load_workbook(filename='這是一個表格.xlsx ')
sheet = workbook.active    
cell_a3 = sheet[ 'A3']    
pattern_fill = PatternFill( fill_type='solid', fgColor='99ccff')
cell_a3.fill = pattern_fil1
cell_a4 = sheet[ 'A4']   
gradient_fill = GradientFill(stop=( 'FFFFFF' , '99ccff' , '000000 ')) #漸變色
cell_a4.fill = gradient_fill    
workbook.save( filename='測試.xlsx ')   

6.合並單元格

# .merge_cells(待合並的格子編號)
# .merge_cells(start_row=起始行號, start_column=起始列號, end_row=結束行號,end_column=結束列號)    
workbook = load_workbook( filename='測試.xlsx')
sheet = workbook.active    
sheet.merge_cells('C1:D2')
sheet.merge_cells(start_row=7,start_column=1,end_row=8,end_column=4)
workbook.save( filename='測試.xlsx ')

7.取消合並單元格

# .unmerge_cells(待合並的格子編號)
# .unmerge_cells(start_row=起始行號, start_column=起始列號, end_row=結束行號, end_column=結束列號)   
workbook = load_workbook( filename='測試.xlsx')
sheet = workbook.active
sheet.unmerge_cells ( 'C1:D2')
sheet.unmerge_cells (start_row=7, start_column=1, end_row=8,end_column=4)
workbook.save( filename='測試.xlsx ')

8.插入圖片

from openpyxl import load_workbook
from openpyxl.drawing.image import Image
workbook = load_workbook(filename="測試.xlsx")
sheet = workbook.active
logo = Image("劉亦菲.jpg")  # 圖片路徑
logo.height = 100
logo.width = 100
sheet.add_image( logo,"C1")  # 插入位置
workbook.save( filename="測試.xlsx")   

9.插入柱狀圖

from openpyxl import load_workbook
from openpyxl.chart import BarChart, Reference
workbook = load_workbook(filename="測試.xlsx")
sheet = workbook.active
chart = BarChart()
data = Reference(worksheet=sheet,min_row=1,max_row=7, min_col=2,max_col=3)  #設定數據引用范圍
categories = Reference(sheet,min_col=1, min_row=2, max_row=7) # 分類名稱
chart.add_data(data,titles_from_data=True) #titles_from_data 使用數據源中的標題,如果存在的話
chart.set_categories(categories)
sheet.add_chart(chart,"E2")
workbook.save("測試.xlsx")

10.插入折線圖  

from openpyxl import load_workbook
from openpyxl.chart import LineChart,Reference
workbook = load_workbook(filename="測試.xlsx" )
sheet = workbook.active
chart = LineChart()
data = Reference(worksheet=sheet, min_row=20,max_row=21,min_col=1,max_col=13)
categories = Reference(sheet,min_row=19,min_col=2, max_col=13)
chart.add_data(data,from_rows=True,titles_from_data=True)  # from_rows=True表示數據是橫向的
chart.set_categories(categories)
sheet.add_chart(chart,"B23")
workbook.save("測試.xlsx")

  


免責聲明!

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



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