python使用openpyxl操作excel總結


安裝openpyxl

pip install openpyxl

簡單示例

from openpyxl import Workbook #創建一個工作薄對象,也就是創建一個excel文檔
wb = Workbook() #指定當前顯示(活動)的sheet對象
ws = wb.active # 給A1單元格賦值
ws['A1'] = 42

# 一行添加多列數據
ws.append([1, 2, 3]) # 保存excel
wb.save("sample.xlsx")

 

使用openpyxl的一般流程為:創建/讀取excel文件-->選擇sheet對象-->對表單/cell進行操作-->保存excel

 

1.創建/讀取excel文件

創建excel

from openpyxl import Workbook wb = Workbook()

讀取excel

from openpyxl import load_workbook wb = load_workbook('1.xlsx')

保存excel

wb.save('filename.xlsx')

 

2.sheet表單操作

獲取sheet

#以list方式返回excel文件所有sheet名稱(->list[str,str..])
wb.sheetnames wb.get_sheet_names()

選擇sheet對象

#根據sheet名稱選取
ws = wb['sheet1'] ws = wb.get_sheet_by_name('sheet1') #選擇當前顯示,活動的sheet
ws = wb.active ws = wb.get_active_sheet()

創建新的sheet

#默認插入到最后
ws = wb.create_sheet("newsheet") #插入到最開始的位置(從0開始計算)
ws = wb.create_sheet("newsheet", 0)

復制一個sheet對象

source = wb.active target = wb.copy_worksheet(source)

sheet常見屬性

#sheet名稱
sheet.title #最大行和最大列
sheet.max_row sheet.max_column #行列生成器
sheet.rows #為行生成器, 里面是每一行的cell對象,由一個tuple包裹。 sheet.columns #為列生成器, 里面是每一列的cell對象,由一個tuple包裹。
可以使用list(sheet.rows)[0].value 類似方法來獲取數據,或
for row in sheet.rows: for cell in row: print(cell.value) 來遍歷值,或值生成器 sheet.values 僅遍歷值

刪除sheet

wb.remove(sheetobject) del wb['sheet'] #sheetname

sheet的其它操作

#插入行,在第7行之前插入
ws.insert_rows(7) #插入列,在第7列之前插入
ws.insert_cols(7) #刪除行列
ws.delete_rows(7) ws.delete_cols(7) #可以刪除多個
ws.delete_cols(6, 3)

 

3.單元格對象

選擇cell單元格對象

#根據名稱訪問
a1 = ws['A1'] #A列1行的單元對象
a2 = ws['a2'] #也可以小寫 #cell方法訪問
b2 = ws.cell(row=2, column=2) b3 = ws.cell(3,2) #從cell列表中返回
b3 = list(ws.rows)[2][1] b3 = list(ws.columns)[1][2]

選擇多個單元格

#切片訪問
a2_b3 = ws['a2':'b3'] 以行組成tuple返回tuple ((<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>), (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>)) #單獨字母與數字返回列與行的所有數據
b = ws['b'] #返回b列的所有cell對象
row1 = ws['1'] #返回第1行的所有cell #當然也能范圍選擇
a_e = ws['a:e'] #a-e列的cell對象

單元格屬性

#返回列
cell.column
#返回行
cell.row
#返回值
cell.value
注意:如果單元格是使用的公式,則值是公式而不是計算后的值
#返回單元格格式屬性
cell.number_format
默認為General格式
#單元格樣式
cell.font

更改單元格值

#直接賦值
ws['a2'] = 222 ws['a2'] = 'aaa' ws['b2'] = '=SUM(A1:A17)' #使用公式

#value屬性賦值
cell.value = 222 或 ws.cell(1,2,value = 222)

移動單元格

ws.move_range("D4:F10", rows=-1, cols=2)
表示單元格D4:F10向上移動一行,右移兩列。單元格將覆蓋任何現有單元格。(最新版本的才會這個方法,使用pip list查看版本是否為最新)
ws.move_range("G4:H10", rows=1, cols=1, translate=True)
移動中包含公式的自動轉換

合並與拆分單元格

#合並單元格,以最左上角寫入數據或讀取數據
ws.merge_cells('A2:D2')
#拆分單元格
ws.unmerge_cells('A2:D2')

 

4.格式樣式設置

導入類

from openpyxl.styles import Font, colors, Alignment

Font類常見參數

font = Font(name='Calibri',        #字體名字
                 size=11,             #字體大小
                 bold=False,          #是否加粗
                 italic=False,        #斜體
                 underline='none',  #下划線
                 color='FF000000')  #顏色,可以用colors中的顏色

設置字體

t_font = Font(name='Calibri', size=24, italic=True, color=colors.RED, bold=True)
#給font屬性賦值font對象即可
sheet['A1'].font = t_font

對齊方式

# 設置B1中的數據垂直居中和水平居中,除了center,還可以使用right、left等等參數
sheet['B1'].alignment = Alignment(horizontal='center', vertical='center')

設置單元格長寬

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

 

官方文檔參考:https://openpyxl.readthedocs.io/en/latest/

 


免責聲明!

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



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