1.準備環境
Python版本:3.6.5
IDE集成開發環境:pycharm
Python庫選擇:openpyxl
openpyxl操作的excel文件以xlsx結尾。
基礎命令
查看 Python 版本
python --version
查看 pip 版本
pip --version
安裝openxlsx
pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple/
2.打開保存
使用 openpyxl
創建,并保存一個 excel
文件
from openpyxl import Workbookwb = Workbook()
ws = wb.active
print(ws.title)wb.save(r"C:\Users\Dell\Desktop\PDF\test.xlsx")
打開剛才保存的文件
from openpyxl import Workbook, load_workbookwb = load_workbook(r"C:\Users\Dell\Desktop\PDF\test.xlsx")
ws = wb.active
print(ws.title)
3.操作工作表
創建
ws1 = wb.active
# 查看當前工作表名
print(ws1.title)
# 查看所有的工作表名
# print(wb.get_sheet_names())
# 查看所有的工作表名
print(wb.sheetnames)ws2 = wb.create_sheet('Sheet2', 1)
ws3 = wb.create_sheet('Sheet3', 2)print(wb.sheetnames)ws4 = wb['Sheet3']
print(ws4.title)
運行后,控制臺打印如下結果
Sheet
['Sheet']
['Sheet', 'Sheet2', 'Sheet3']
Sheet3
移動
from openpyxl import Workbookwb = Workbook()ws1 = wb.active
# 查看當前工作表名
print(ws1.title)
# 查看所有的工作表名
# print(wb.get_sheet_names())
# 查看所有的工作表名
print(wb.sheetnames)ws2 = wb.create_sheet('Sheet2', 1)
ws3 = wb.create_sheet('Sheet3', 2)# move_sheet移動工作表
# 參數offset代表偏移值,-1向前移動一個位置,1代表向后移動一個位置,以此類推。
wb.move_sheet(ws3, -1);# del wb['Sheet3']print(wb.sheetnames)
運行后,控制臺打印如下結果,Sheet3移動到了Sheet2前面
Sheet
['Sheet']
['Sheet', 'Sheet3', 'Sheet2']
刪除
del wb['Sheet3']
4.訪問單元格
寫入單元格的值
from openpyxl import Workbookwb = Workbook()
ws = wb.activews['a6'] = '池田依來沙'
wb.save("test.xlsx")
修改單元格的值
from openpyxl import Workbookwb = Workbook()
ws = wb.active# ws['a6'] = '池田依來沙'# cell方法的入參
# 譬如6就是row,代表第幾行
# 譬如1就是column,代表第幾列
cell = ws.cell(6, 1, "Malena")cell.value = 'morgan'
print(cell.value)
wb.save("test.xlsx")
from openpyxl import Workbookwb = Workbook()
ws = wb.active# ws['a6'] = '池田依來沙'# cell方法的入參
# 譬如6就是row,代表第幾行
# 譬如1就是column,代表第幾列
cell = ws.cell(6, 1, "Malena")cell.value = 'morgan'
print(cell.value)
# coordinate 代表單元格的坐標,譬如 A6
print(cell.coordinate)
# row,代表第幾行
print(cell.row)
# column,代表第幾列
print(cell.column)
# col_idx,代表第幾列
print(cell.col_idx)
# 第幾列,用字母表示,譬如第一列為A
print(cell.column_letter)wb.save("test.xlsx")
循環遍歷,以及打印單元格
from openpyxl import Workbookwb = Workbook()
ws = wb.activex = 1
for i in range(1, 11):for j in range(1, 6):ws.cell(i, j, x)x += 1
# 打印出A列到C列
print(ws["a:c"])
# 打印出第1行到第5行
print(ws["1:5"])
# 打印出a1到c4
print(ws["a1:c4"])
# 打印出第1行
print(ws["1"])
# 打印出字母C列表
print(ws["c"])
from openpyxl import Workbookwb = Workbook()
ws = wb.active# ws['a6'] = '池田依來沙'# cell方法的入參
# 譬如6就是row,代表第幾行
# 譬如1就是column,代表第幾列
# cell = ws.cell(6, 1, "Malena")
#
# cell.value = 'morgan'
# print(cell.value)
# # coordinate 代表單元格的坐標,譬如 A6
# print(cell.coordinate)
# # row,代表第幾行
# print(cell.row)
# # column,代表第幾列
# print(cell.column)
# # col_idx,代表第幾列
# print(cell.col_idx)
# # 第幾列,用字母表示,譬如第一列為A
# print(cell.column_letter)x = 1
for i in range(1, 11):for j in range(1, 6):ws.cell(i, j, x)x += 1for cells in ws["a1:c4"]:for cell in cells:print(cell)print(cell.value)
5.操作單元格
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
x = 1
for i in range(1, 11):for j in range(1, 11):ws.cell(i, j, x)x +=1# 合并單元格 merge_cells 方法
ws.merge_cells("b2:d4")
# 取消合并 unmerge_cells 方法
ws.unmerge_cells("b2:d4")# 插入列,入參兩個,分別代表從第幾列開始,插入幾列
ws.insert_cols(2, 3)
# 插入行,入參兩個,分別代表從第幾行開始,插入幾行
ws.insert_rows(1, 2)
# 刪除列,入參兩個,分別代表從第幾列開始,刪除幾列
ws.delete_cols(6, 2)
# 刪除行,入參兩個,分別代表從第幾行開始,刪除幾行
ws.delete_rows(6, 3)
# 移動單元格,入參三個:選中的單元格,上下移動(正數為下,負數為上),左右移動(正數為右,負數為左)
ws.move_range("c4:e5", 2, -2)wb.save("test.xlsx")
6.使用公式
from openpyxl import Workbook
from openpyxl.formula.translate import Translator
from openpyxl.utils import FORMULAEwb = Workbook()
ws = wb.activeprint(len(FORMULAE))
print('SUM' in FORMULAE)ws.append(["價格1", "價格2", "求和", "平均值"])
ws.append([95,27])
ws.append([48,31])
ws.append([11,23])# 價格1 價格2 求和 平均值
# 95 27
# 48 31
# 11 23# 求和
ws["c2"] = "=SUM(A2,B2)"
# 平均值
ws["d2"] = "=AVERAGE(A2,B2)"# 翻譯 Translator 方法ws["c3"] = Translator(formula="=SUM(A2,B2)", origin="c2").translate_formula("c3")
ws["c4"] = Translator(formula="=SUM(A2,B2)", origin="c2").translate_formula("c4")ws["d3"] = Translator(formula="=AVERAGE(A2,B2)", origin="d2").translate_formula("d3")
ws["d4"] = Translator(formula="=AVERAGE(A2,B2)", origin="d2").translate_formula("d4")# 價格1 價格2 求和 平均值
# 95 27 122 61
# 48 31 79 39.5
# 11 23 34 17# 循環遍歷
for cell in ws["c3:c4"]:print(cell)
# 打印得到一個元組,例如:(<Cell 'Sheet'.C3>,)cell[0].value = Translator(formula="=SUM(A2,B2)", origin="c2").translate_formula(cell[0].coordinate)wb.save("test.xlsx")
7.設置樣式
from openpyxl import Workbook
from openpyxl.styles import Font, Alignmentwb = Workbook()
ws = wb.activews["a1"] = "池田依來沙"f = Font(name="微軟雅黑", size=42, color="F56C6C", bold=True, italic=True, strike=True, underline="double")
ws["a1"] .font = f# 設置行高
ws.row_dimensions[2].height = 100
# 設置列寬
ws.column_dimensions["B"].width = 50# 水平和垂直的布局位置,旋轉,是否需要換行,是否自動適配縮小,縮進的值
a = Alignment(horizontal="left", vertical="top", text_rotation=0, wrap_text=True, shrink_to_fit=False, indent=0)
ws["a1"].alignment = a;wb.save("test.xlsx")
8.過濾和排序
from openpyxl import Workbookwb = Workbook()
ws = wb.activerows = [['名稱', '顏值', '身材', '價值'],['mila', '80', '90', '99'],['malena', '80', '90', '96'],['morgan', '100', '90', '99'],['sf', '80', '20', '97'],['ac', '30', '90', '92'],
]for row in rows:ws.append(row)# 設置過濾范圍
ws.auto_filter.ref = "a1:d7"# 過濾方法 add_filter_column 入參:第幾列(從2開始),過濾條件
ws.auto_filter.add_filter_column(0, ["mila", "malena"])
# 排序方法 入參: 范圍,排序方式(False升序,True倒序)
ws.auto_filter.add_sort_condition("c2:d6", True)wb.save('test.xlsx')
注意,add_filter_column和add_sort_condition方法并不會直接執行排序,需要打開excel文件后,在篩選和排序上點擊確認才能真正的執行。
通過安裝第三方庫,譬如pandas可以直接執行排序和篩選的操作
安裝
pip install pandas
pandas 的使用
import pandas as pd
df = pd.read_excel('test.xlsx', sheet_name="Sheet")
# ascending True代表升序 ,False代表倒序
df_value = df.sort_values(by=["顏值","身材"], ascending=True)writer = pd.ExcelWriter("test2.xlsx")
df_value.to_excel(writer,sheet_name="Sheet2", index=False)
writer.save()
9.插入圖表
“https://openpyxl.readthedocs.io/en/stable/charts/introduction.html”)
from openpyxl import Workbook
from openpyxl.chart import LineChart, Referencewb = Workbook()
ws = wb.active# 準備數據
rows = [['月份', '桃子', '西瓜', '龍眼'],[1, 38, 28, 29],[2, 52, 21, 35],[3, 39, 20, 69],[4, 51, 29, 41],[5, 29, 39, 31],[6, 30, 41, 39],
]
for row in rows:ws.append(row)# 創建圖表
c1 = LineChart()
c1.title = "折線圖" # 標題
c1.style = 13 # 樣式
c1.y_axis.title = '銷量' # Y軸
c1.x_axis.title = '月份' # X軸# 選擇數據范圍
data = Reference(ws, min_col=2, min_row=1, max_col=4, max_row=7)
c1.add_data(data, titles_from_data=True)# 線條樣式
s0 = c1.series[0]
s0.marker.symbol = "triangle" # triangle為三角形標記, 可選circle、dash、diamond、dot、picture、plus、square、star、triangle、x、auto
s0.marker.graphicalProperties.solidFill = "FF0000" # 填充顏色
s0.marker.graphicalProperties.line.solidFill = "0000FF" # 邊框顏色
# s0.graphicalProperties.line.noFill = True # 改為True則隱藏線條,但顯示標記形狀s1 = c1.series[1]
s1.graphicalProperties.line.solidFill = "00AAAA"
s1.graphicalProperties.line.dashStyle = "sysDot" # 線條點狀樣式
s1.graphicalProperties.line.width = 80000 # 線條大小,最大20116800EMUss2 = c1.series[2] # 采用默認設置
s2.smooth = True # 線條平滑ws.add_chart(c1, "A8") # 圖表位置wb.save("line.xlsx")
10.只讀只寫
讀寫大文件,使用只讀只寫模式
只讀模式
只讀取數值用于其他數據分析,不改變和保存。
from openpyxl import load_workbook# 加載Excel文件時使用read_only指定只讀模式
wb = load_workbook(filename='large_file.xlsx', read_only=True)
ws = wb['big_data']# 可以正常讀取值
for row in ws.rows:for cell in row:print(cell.value)# 注意:讀取完之后需要手動關閉避免內存泄露
wb.close()
只寫模式
可以在創建的時候指定為只寫模式以便提高性能,不管文件有多大,都可以把內存保持在10M以下。
from openpyxl import Workbook
from openpyxl.cell import WriteOnlyCell
from openpyxl.comments import Comment
from openpyxl.styles import Fontwb = Workbook(write_only=True) # 創建工作簿時指定只寫模式
ws = wb.create_sheet() # 需要通過create_sheet創建一個sheet# 可以正常保存數據
for _ in range(100):ws.append([i for i in range(200)]) # 只能通過append寫# 如果需要保留公式、注釋等操作,可以使用WriteOnlyCell
cell = WriteOnlyCell(ws, value="冰冷的希望")
cell.font = Font(name='黑體', size=15)
cell.comment = Comment(text="這是注釋", author="pan")ws.append([cell])wb.save('openpyxl/test.xlsx')
如果你對Python感興趣,想要學習python,這里給大家分享一份Python全套學習資料,都是我自己學習時整理的,希望可以幫到你,一起加油!
😝有需要的小伙伴,可以點擊下方鏈接免費領取或者V掃描下方二維碼免費領取🆓
Python全套學習資料
1??零基礎入門
① 學習路線
對于從來沒有接觸過Python的同學,我們幫你準備了詳細的學習成長路線圖。可以說是最科學最系統的學習路線,你可以按照上面的知識點去找對應的學習資源,保證自己學得較為全面。
② 路線對應學習視頻
還有很多適合0基礎入門的學習視頻,有了這些視頻,輕輕松松上手Python~
③練習題
每節視頻課后,都有對應的練習題哦,可以檢驗學習成果哈哈!
2??國內外Python書籍、文檔
① 文檔和書籍資料
3??Python工具包+項目源碼合集
①Python工具包
學習Python常用的開發軟件都在這里了!每個都有詳細的安裝教程,保證你可以安裝成功哦!
②Python實戰案例
光學理論是沒用的,要學會跟著一起敲代碼,動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰案例來學習。100+實戰案例源碼等你來拿!
③Python小游戲源碼
如果覺得上面的實戰案例有點枯燥,可以試試自己用Python編寫小游戲,讓你的學習過程中增添一點趣味!
4??Python面試題
我們學會了Python之后,有了技能就可以出去找工作啦!下面這些面試題是都來自阿里、騰訊、字節等一線互聯網大廠,并且有阿里大佬給出了權威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
5??Python兼職渠道
而且學會Python以后,還可以在各大兼職平臺接單賺錢,各種兼職渠道+兼職注意事項+如何和客戶溝通,我都整理成文檔了。
上述所有資料 ?? ,朋友們如果有需要的,可以掃描下方👇👇👇二維碼免費領取🆓