基於Python操作Excel實現辦公自動化


Python內部未提供處理Excel文件的功能,想要在Python中操作Excel需要按照第三方的模塊。

pip install openpyxl

1.讀Excel

1.1.讀sheet

from openpyxl import load_workbook

wb = load_workbook("files/p1.xlsx")

# sheet相關操作

# 1.獲取excel文件中的所有sheet名稱

print(wb.sheetnames) # ['數據導出', '用戶列表', 'Sheet1', 'Sheet2']


# 2.選擇sheet,基於sheet名稱

sheet = wb["數據導出"]
cell = sheet.cell(1, 2)
print(cell.value)


# 3.選擇sheet,基於索引位置

sheet = wb.worksheets[0]
cell = sheet.cell(1,2)
print(cell.value)


# 4.循環所有的sheet

for name in wb.sheetnames:
    sheet = wb[name]
    cell = sheet.cell(1, 1)
    print(cell.value)


for sheet in wb.worksheets:
    cell = sheet.cell(1, 1)
    print(cell.value)


for sheet in wb:
    cell = sheet.cell(1, 1)
    print(cell.value)

1.2讀sheet中單元格的數據

from openpyxl import load_workbook

wb = load_workbook("files/p1.xlsx")
sheet = wb.worksheets[0]

# 1.獲取第N行第N列的單元格(位置是從1開始)

cell = sheet.cell(1, 1)

print(cell.value)
print(cell.style)
print(cell.font)
print(cell.alignment)


# 2.獲取某個單元格

c1 = sheet["A2"]
print(c1.value)

c2 = sheet['D4']
print(c2.value)


# 3.第N行所有的單元格

for cell in sheet[1]:
    print(cell.value)


# 4.所有行的數據(獲取某一列數據)

for row in sheet.rows:
    print(row[0].value, row[1].value)


# 5.獲取所有列的數據

for col in sheet.columns:
    print(col[1].value)

1.3讀合並的單元格

from openpyxl import load_workbook

wb = load_workbook("files/p1.xlsx")
sheet = wb.worksheets[2]

# 獲取第N行第N列的單元格(位置是從1開始)
c1 = sheet.cell(1, 1)
print(c1)  # <Cell 'Sheet1'.A1>
print(c1.value) # 用戶信息

c2 = sheet.cell(1, 2)
print(c2)  # <MergedCell 'Sheet1'.B1>
print(c2.value) # None
from openpyxl import load_workbook

wb = load_workbook('files/p1.xlsx')
sheet = wb.worksheets[2]
for row in sheet.rows:
    print(row)

2.寫Excel

2.1原Excel文件基礎上寫內容

from openpyxl import load_workbook

wb = load_workbook('files/p1.xlsx')
sheet = wb.worksheets[0]

# 找到單元格,並修改單元格的內容
cell = sheet.cell(1, 1)
cell.value = "新的開始"

# 將excel文件保存到p2.xlsx文件中
wb.save("files/p2.xlsx")

2.2新創建Excel文件寫內容

from openpyxl import workbook

# 創建excel且默認會創建一個sheet(名稱為Sheet)
wb = workbook.Workbook()

sheet = wb.worksheets[0] # 或 sheet = wb["Sheet"]

# 找到單元格,並修改單元格的內容
cell = sheet.cell(1, 1)
cell.value = "新的開始"

# 將excel文件保存到p2.xlsx文件中
wb.save("files/p2.xlsx")

2.3了解了如何讀取Excel和創建Excel之后,后續對於Excel中的sheet和cell操作基本上都相同

from openpyxl import workbook

wb = workbook.Workbook() # Sheet

# 1. 修改sheet名稱

sheet = wb.worksheets[0]
sheet.title = "數據集"
wb.save("p2.xlsx")


# 2. 創建sheet並設置sheet顏色

sheet = wb.create_sheet("工作計划", 0)
sheet.sheet_properties.tabColor = "1072BA"
wb.save("p2.xlsx")


# 3. 默認打開的sheet

wb.active = 0
wb.save("p2.xlsx")


# 4. 拷貝sheet

sheet = wb.create_sheet("工作計划")
sheet.sheet_properties.tabColor = "1072BA"

new_sheet = wb.copy_worksheet(wb["Sheet"])
new_sheet.title = "新的計划"
wb.save("p2.xlsx")


# 5.刪除sheet

del wb["用戶列表"]
wb.save('files/p2.xlsx')
from openpyxl import load_workbook
from openpyxl.styles import Alignment, Border, Side, Font, PatternFill, GradientFill


wb = load_workbook('files/p1.xlsx')

sheet = wb.worksheets[1]

# 1. 獲取某個單元格,修改值

cell = sheet.cell(1, 1)
cell.value = "開始"
wb.save("p2.xlsx")


# 2.  獲取某個單元格,修改值

sheet["B3"] = "Alex"
wb.save("p2.xlsx")


# 3. 獲取某些單元格,修改值

cell_list = sheet["B2":"C3"]
for row in cell_list:
    for cell in row:
        cell.value = "新的值"
wb.save("p2.xlsx")


# 4. 對齊方式

cell = sheet.cell(1, 1)

# horizontal,水平方向對齊方式:"general", "left", "center", "right", "fill", "justify", "centerContinuous", "distributed"
# vertical,垂直方向對齊方式:"top", "center", "bottom", "justify", "distributed"
# text_rotation,旋轉角度。
# wrap_text,是否自動換行。
cell.alignment = Alignment(horizontal='center', vertical='distributed', text_rotation=45, wrap_text=True)
wb.save("p2.xlsx")


# 5. 邊框
# side的style有如下:dashDot','dashDotDot', 'dashed','dotted','double','hair', 'medium', 'mediumDashDot', 'mediumDashDotDot','mediumDashed', 'slantDashDot', 'thick', 'thin'

cell = sheet.cell(9, 2)
cell.border = Border(
    top=Side(style="thin", color="FFB6C1"), 
    bottom=Side(style="dashed", color="FFB6C1"),
    left=Side(style="dashed", color="FFB6C1"),
    right=Side(style="dashed", color="9932CC"),
    diagonal=Side(style="thin", color="483D8B"),  # 對角線
    diagonalUp=True,  # 左下 ~ 右上
    diagonalDown=True  # 左上 ~ 右下
)
wb.save("p2.xlsx")


# 6.字體

cell = sheet.cell(5, 1)
cell.font = Font(name="微軟雅黑", size=45, color="ff0000", underline="single")
wb.save("p2.xlsx")


# 7.背景色

cell = sheet.cell(5, 3)
cell.fill = PatternFill("solid", fgColor="99ccff")
wb.save("p2.xlsx")


# 8.漸變背景色

cell = sheet.cell(5, 5)
cell.fill = GradientFill("linear", stop=("FFFFFF", "99ccff", "000000"))
wb.save("p2.xlsx")


# 9.寬高(索引從1開始)

sheet.row_dimensions[1].height = 50
sheet.column_dimensions["E"].width = 100
wb.save("p2.xlsx")


# 10.合並單元格

sheet.merge_cells("B2:D8")
sheet.merge_cells(start_row=15, start_column=3, end_row=18, end_column=8)
wb.save("p2.xlsx")


sheet.unmerge_cells("B2:D8")
wb.save("p2.xlsx")


# 11.寫入公式

sheet = wb.worksheets[3]
sheet["D1"] = "合計"
sheet["D2"] = "=B2*C2"
wb.save("p2.xlsx")


sheet = wb.worksheets[3]
sheet["D3"] = "=SUM(B3,C3)"
wb.save("p2.xlsx")


# 12.刪除

# idx,要刪除的索引位置
# amount,從索引位置開始要刪除的個數(默認為1)
sheet.delete_rows(idx=1, amount=20)
sheet.delete_cols(idx=1, amount=3)
wb.save("p2.xlsx")


# 13.插入

sheet.insert_rows(idx=5, amount=10)
sheet.insert_cols(idx=3, amount=2)
wb.save("p2.xlsx")


# 14.循環寫內容

sheet = wb["Sheet"]
cell_range = sheet['A1:C2']
for row in cell_range:
    for cell in row:
        cell.value = "xx"

for row in sheet.iter_rows(min_row=5, min_col=1, max_col=7, max_row=10):
    for cell in row:
        cell.value = "oo"
wb.save("p2.xlsx")


# 15.移動

# 將H2:J10范圍的數據,向右移動15個位置、向上移動1個位置
sheet.move_range("H2:J10",rows=1, cols=15)
wb.save("p2.xlsx")


sheet = wb.worksheets[3]
sheet["D1"] = "合計"
sheet["D2"] = "=B2*C2"
sheet["D3"] = "=SUM(B3,C3)"
sheet.move_range("B1:D3",cols=10, translate=True) # 自動翻譯公式
wb.save("p2.xlsx")


# 16.打印區域

sheet.print_area = "A1:D200"
wb.save("p2.xlsx")


# 17.打印時,每個頁面的固定表頭

sheet.print_title_cols = "A:D"
sheet.print_title_rows = "1:3"
wb.save("p2.xlsx")

 


免責聲明!

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



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