安裝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/