Python自動化操作Excel表格

一、Python打開及讀取Excel表格內容

二、Python向Excel表格中寫

三、批量調整字體、樣式

四、編程生成Excel內圖表

一、Python打開及讀取Excel表格內容
#打開以及讀取Excel表格內容
#列:column 行:row 格子:cell 表:sheet
#Excel中從1開始計數
from openpyxl import load_workbook
 
workbook = load_workbook(filename='aaa.xlsx')#只能打開存在表格
 
print (workbook.sheetnames)#獲取Sheel名稱
sheet = workbook['Sheet1']#通過Sheet名稱獲取表格
print(sheet.dimensions)#獲得表格尺寸大小
 
sheet = workbook.active#打開活躍的/唯一的表格
#cell = sheet['A1']#獲取A1格子
#.row行數
#.column列數
#.coordinate 座標
cell = sheet.cell(row=1, column=1)#可用行數和列數定位某個格子
print(cell.value)#該格子的數據
print(cell.row,cell.column, cell.coordinate)#獲得某個格子的行數、列數、座標
cell = sheet['A1:A5']#獲得一系列格子
print(cell)
 
#.iter_rows(min_row=最低行數,max_row=最高行數,min_col=最低列數,max_col=最高列數)
#指定行和列的範圍,按行獲取
#按行獲取
for row in sheet.iter_rows(min_row=2,max_row=3,min_col=1,max_col=2):
    for cell in row:
        print(cell)#第二行第一列 到 第三行到第二列
print('-------------------------------------')
#按列獲取
for col in sheet.iter_cols(min_row=2,max_row=3,min_col=1,max_col=2):
    for cell in col:
        print(cell)#第二行第一列 到 第三行到第二列
print('-------------------------------------')
#迭代整個表格的所有行 .rows
for row in sheet.rows:
    for cell in row:
        print(cell)
二、Python向Excel表格中寫
from openpyxl.utils import FORMULAE#查看openpyxl支持的公式
from openpyxl import Workbook#創建新的Excel表格文件
用Python列表數據插入一行 sheet.append(Python列表) 接在表格內已有數據後面
插入公式 sheet['F1002'] = '=AVERAGE(F2:F1001)'
插入一列 .insert_cols(idx=數子編號)
插入多列 .insert_cols(idx=數子編號,amount=要插入的列數)
插入一行 .insert_rows(idx=數子編號)
插入多行 .insert_rows(idx=數子編號,amount=要插入的列數)
刪除一個sheet workbook.remove(sheet實例)
創建新的sheet workbook.create_sheet(sheet名稱)
凍結窗格 sheet.freeze_panes = "G2"
#向Excel表格中寫
from openpyxl import load_workbook
from openpyxl.utils import FORMULAE#查看openpyxl支持的公式
from openpyxl import Workbook#創建新的Excel表格文件
 
workbook = load_workbook(filename='aaa.xlsx')
sheet = workbook.active
 
#一、
#向某個格子寫入內容並保存
sheet['A1'] = '你好啊'
workbook.save(filename='aaa.xlsx')
 
#二、
#用Python列表數據插入一行
#sheet.append(Python列表) 接在表格內已有數據後面
data = [
    ['a', 1],
    ['b', 2],
    ['c', 3],
    ['d', 4],
]
for row in data:
    sheet.append(row)
workbook.save(filename='aaa.xlsx')
 
#三、
#插入公式
sheet['F1002'] = '=AVERAGE(F2:F1001)'
workbook.save(filename='阿里雲天池電商嬰兒用戶數據.xlsx')
 
#四、
#查看openpyxl支持的公式
print(FORMULAE)
 
#五、
#插入一列 .insert_cols(idx=數子編號)
#插入多列 .insert_cols(idx=數子編號,amount=要插入的列數)
#插入一行 .insert_rows(idx=數子編號)
#插入多行 .insert_rows(idx=數子編號,amount=要插入的列數)
sheet.insert_cols(idx=2)
workbook.save(filename='阿里雲天池電商嬰兒用戶數據.xlsx')
 
#六、
#刪除列 .delete_cols(idx=數子編號,amount=要刪除的列數)
#刪除行 .delete_rows(idx=數子編號,amount=要刪除的列數)
sheet.delete_cols(idx=2, amount=2)
workbook.save(filename='阿里雲天池電商嬰兒用戶數據.xlsx')
 
#七、
#移動格子 .move_range("C2:D4",row=2,col=-2)向下移2行,向左移2行
#正數爲向下或向右,負數爲向左或向上
 
#八、
#創建新的sheet workbook.create_sheet(sheet名稱)
print(workbook.sheetnames)
workbook.create_sheet('表格2')
print(workbook.sheetnames)
workbook.save(filename='aaa.xlsx')
 
#九、
#刪除一個sheet workbook.remove(sheet實例)
print(workbook.sheetnames)
sheet = workbook['表格21']
workbook.remove(sheet)
print(workbook.sheetnames)
workbook.save(filename='aaa.xlsx')
 
#十、
#複製一個sheet workbook.copy_worksheet(sheet實例)
print(workbook.sheetnames)
workbook.create_sheet('表格1')
sheet = workbook['表格1']
workbook.copy_worksheet(sheet)
print(workbook.sheetnames)
workbook.save(filename='aaa.xlsx')
#十一、
#x修改表格名稱 sheet.title=''
 
#十二、
#創建新的Excel表格文件
workbook = Workbook()
sheet = workbook.active
sheet.title = '表格1'
workbook.save(filename='這是一個新表格.xlsx')
 
 
#十三、
#凍結窗格 sheet.freeze_panes = "G2"
sheet.freeze_panes = "B2"
workbook.save(filename='aaa.xlsx')
 
#十四、
#添加篩選 sheet.auto_filter.ref = sheet.dimensions
sheet = workbook['(sample)sam_tianchi_mum_baby_tr']
sheet.auto_filter.ref = sheet.dimensions
workbook.save(filename='aaa.xlsx')
三、批量調整字體、樣式
from openpyxl.styles import Alignment    #設置對其樣式
from openpyxl.styles import Side,Border    #設置邊框樣式
from openpyxl.styles import PatternFill, GradientFill     #設置填充樣式
Font(name=字體名稱,size=字體大小,bold=是否加粗,italic=是否斜體,color=字體顏色)
獲取表格中字體的樣式 cell.font.屬性
設置對其樣式 Alignment(horizontal=水平對其模式,vertical=垂直對其模式,text_rotation=旋轉角度,wrap_text=是否自動換行)
設置邊框樣式  Side(style=邊線樣式,color=邊線顏色)
設置填充樣式 PatternFill(fill_type=填充樣式, fgColor=填充顏色)
設置行高和列寬 row_dimensions[行編號].height=行高
合併單元格
.merge_cells(待合併格子編號)
.merge_cells(start_row=起始行號,start_column=起始列號,end_row=結束行號,end_column=結束列號)
#批量調整字體、樣式
 
from openpyxl.styles import Font
from openpyxl import load_workbook
from openpyxl.styles import Alignment#設置對其樣式
from openpyxl.styles import Side,Border#設置邊框樣式
from openpyxl.styles import PatternFill, GradientFill#設置填充樣式
 
workbook = load_workbook(filename='aaa.xlsx')
sheet = workbook.active
 
cell = sheet['A1']
#一、
#Font(name=字體名稱,size=字體大小,bold=是否加粗,italic=是否斜體,color=字體顏色)
font = Font(name='思源黑體 Regular',size=12,bold=True, italic=True,color='FF0000')
cell.font = font
workbook.save(filename='aaa.xlsx')
 
#二、
#獲取表格中字體的樣式 cell.font.屬性
font = cell.font
print(font.name, font.size, font.bold, font.italic)
 
 
#三、
#設置對其樣式 Alignment(horizontal=水平對其模式,vertical=垂直對其模式,text_rotation=旋轉角度,wrap_text=是否自動換行)
alignment = Alignment(horizontal='center',vertical='center',text_rotation=45)
cell.alignment = alignment
workbook.save(filename='aaa.xlsx')
 
#四、
#設置邊框樣式
#Side(style=邊線樣式,color=邊線顏色)
#Border(left=左邊線樣式,right=右邊線樣式,top=上邊線樣式,bottom=下邊線樣式)
side = Side(style='thin',color='FF000000')
border = Border(left=side,right=side,top=side,bottom=side)
cell.border = border
workbook.save(filename='aaa.xlsx')
 
#五、
#設置填充樣式
#PatternFill(fill_type=填充樣式, fgColor=填充顏色)
#GradientFill(stop=(漸變顏色1,漸變顏色2,.....))
cell_a3 = sheet['A3']
patternFill = PatternFill(fill_type='solid', fgColor='99ccff')
cell_a3.fill = patternFill
cell_a4 = sheet['A4']
gradient_fill = GradientFill(stop=('FFFFFF','99ccff','000000'))
cell_a4.fill = gradient_fill
workbook.save(filename='aaa.xlsx')
 
#六、
#設置行高和列寬
#row_dimensions[行編號].height=行高
#column_dimensions[列編號].width=列寬
sheet.row_dimensions[1].height = 50
sheet.column_dimensions['B'].width = 20
workbook.save(filename='aaa.xlsx')
 
#七、
#合併單元格
#.merge_cells(待合併格子編號)
#.merge_cells(start_row=起始行號,start_column=起始列號,end_row=結束行號,end_column=結束列號)
sheet.merge_cells('C1:D2')
sheet.merge_cells(start_row=7,start_column=1,end_row=8,end_column=4)
workbook.save(filename='aaa.xlsx')
四、編程生成Excel內圖表
from openpyxl.drawing.image import Image #openpyxl 插入圖片
from openpyxl.chart import BarChart, Reference#插入柱狀圖 
from openpyxl.chart import LineChart, Reference#插入條形圖 
openpyxl 插入圖片 openpyxl.drawing.image sheet.add_image()
插入柱狀圖 BarChart() Reference()
#編程生成Excel內圖表
from openpyxl import load_workbook
from openpyxl.drawing.image import Image #openpyxl 插入圖片
from openpyxl.chart import BarChart, Reference#插入柱狀圖 
from openpyxl.chart import LineChart, Reference#插入條形圖 
workbook = load_workbook(filename="阿里雲天池電商嬰兒用戶數據.xlsx")
sheet = workbook.active
 
#一、
#openpyxl 插入圖片 openpyxl.drawing.image sheet.add_image()
logo = Image("每顆豆.png")
logo.height = 100
logo.width = 100
 
sheet.add_image(logo, "C1")
workbook.save(filename="aaa.xlsx")
 
#二、
#插入柱狀圖 BarChart() Reference()
chart = BarChart()
data = Reference(worksheet=sheet,min_row=2,max_row=1001,min_col=5,max_col=6)#設置數據引用範圍
categories = Reference(sheet, min_col=10, min_row=10, max_row=10)#設定X軸項目名稱
 
chart.add_data(data, titles_from_data=True)#給柱狀圖添加數據 數據源中有標題
chart.set_categories(categories)
sheet.add_chart(chart, "H2")
workbook.save(filename="阿里雲天池電商嬰兒用戶數據.xlsx")
 
#三、
#插入條形圖 BarChart() Reference()
chart = LineChart()
data = Reference(worksheet=sheet,min_row=20,max_row=21,min_col=1,max_col=13)#設置數據引用範圍
categories = Reference(sheet, min_col=19, min_row=2, max_row=13)#設定X軸項目名稱
 
chart.add_data(data, from_rows=True, titles_from_data=True)#給條形圖添加數據 數據源中有標題
chart.set_categories(categories)
sheet.add_chart(chart, "E2")
workbook.save(filename="阿里雲天池電商嬰兒用戶數據.xlsx")
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章