1. 程式人生 > 程式設計 >Python獲取excel內容及相關操作程式碼例項

Python獲取excel內容及相關操作程式碼例項

Python沒有自帶openyxl,需要安裝: pip install openyxl

開啟excel文件: openyxl.load_workbook(excel地址) - 開啟現有excel檔案

openyxl.Workbook() - 新建一個excel檔案

返回一個工作博物件

import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
print(type(wb)) # <class 'openpyxl.workbook.workbook.Workbook'>

openpyxl.load_workbook()函式,傳入一個存在的excel檔名稱/excel檔名稱+檔案路徑,返回一個workbook物件。

從workbook物件中獲取工作表

import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
# print(type(wb))  # <class 'openpyxl.workbook.workbook.Workbook'>
# 工作簿物件.sheetnames  - 獲取當前工作簿中所有表的名字
# print(wb.sheetnames) ['Sheet1','Sheet2','Sheet3']
# 工作簿物件.active  - 獲取當前活動表對應的Worksheet物件
# print(wb.active)  <Worksheet "Sheet1">
# 工作簿物件[表名]  - 根據表名獲取指定表物件
# print(wb["Sheet2"]) <Worksheet "Sheet2">
# 表物件.title  - 獲取表物件的表名
ws = wb["Sheet1"]
# print(ws.title)  Sheet1
# 表物件.max_row  - 獲取表中最多有多少行
# print(ws.max_row)  15
# 表物件.max_column  - 獲取表有多少列
print(ws.max_column) # 3

從表中取得單元格

import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
ws = wb["Sheet1"]
# 表物件['列號行號']  - 獲取指定列的指定行對應的單元格物件(單元格物件是 Cell 類的物件,列號是從A開始,行號是從1開始)
a = ws["A1"]
# print(a) # <Cell 'Sheet1'.A1>
# 單元格物件.value  - 獲取單元格中的內容
print(a.value)
# 單元格物件.row - 獲取行號(數字1開始)
print(a.row)
# 單元格物件.column  - 獲取列號(數字1開始)
print(a.column)
# 單元格物件.coordinate  - 獲取位置(包括行號和列號)
print(a.coordinate)
# 表物件.iter_rows() - 一行一行的取
row_s = ws.iter_rows()
for a in row_s:
  for i in a:
    print(i.value)
# 表物件.iter_cols()  - 列表一列的取
col_s = ws.iter_cols()
for c in col_s:
  for j in c:
    print(j.value)

用字母來指定列時會出現列Z之後用兩個字母代替,可以呼叫表的cell()方法,傳入整數作為行數和列數,第一行或者第一列的整數是1,而不是0

表物件.cell(行號,列號)

import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
ws = wb["Sheet1"]
# 獲取第二列的所有內容
max_row = ws.max_row
for row in range(1,max_row + 1):
  cell = ws.cell(row,2)
  print(cell.value)

從表中取得列和行

取電子表格中一行、一列或一個矩形區域中的所有 Cell 物件

表物件[位置1:位置2] 獲取指定範圍內的所有單元格

import openpyxl
from openpyxl.utils import get_column_letter,column_index_from_string
wb = openpyxl.load_workbook("test.xlsx")
ws = wb["Sheet1"]
max_row = ws.max_row
column = get_column_letter(max_row)
# 獲取第一列所有單元格物件
row2 = ws["A1":f"{column}1"]
ss = [(cell.coordinate,cell.value) for cells in row2 for cell in cells]
print(ss)

import openpyxl
from openpyxl.utils import get_column_letter,column_index_from_string
wb = openpyxl.load_workbook("test.xlsx")
ws = wb["Sheet1"]
max_cols = ws.max_column
column = get_column_letter(max_cols)
# 獲取第一片區域所有單元格物件
row2 = ws["A1":f"{column}3"]
ss = [(cell.coordinate,cell.value) for cells in row2 for cell in cells]
print(ss)

建立並儲存Excel文件

openpyxl.Workbook() - 建立空的Excel檔案對應的工作薄物件

工作薄物件.save(檔案路徑) - 儲存檔案

import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
ws = wb["Sheet1"]
# 修改sheet的名稱
ws.title = "hello_world"
wb.save("test.xlsx")

建立和刪除sheet

工作薄物件.create_sheet(title,index) - 在指定工作薄中的指定位置(預設是最後)建立指定名字的表,並返回表物件

工作薄物件.remove(表物件) - 刪除工作薄中的指定表

import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
wb.create_sheet()
print(wb.sheetnames)
wb.create_sheet("test1")
print(wb.sheetnames)
wb.create_sheet("test2",index=0)
print(wb.sheetnames)
wb.remove(wb["test2"])
print(wb.sheetnames)
wb.save("test.xlsx")

將資料寫入表格中

import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
ws = wb["hello_world"]
# 方式一
ws["A4"] = "hello_world"
# 方式二
ws.cell(4,5).value = "hello_test"
wb.save("test.xlsx")

設定單元格樣式

用表格展示資料的時候,有的時候需要對不同的資料以不同的風格進行展示從而達到分割槽或者強調的作用。

import openpyxl
from openpyxl.styles import Font,PatternFill,Border,Side,Alignment

# 1.開啟工作薄
wb = openpyxl.load_workbook("test.xlsx")
ws = wb["hello_world"]
# 2.設定單元格字型樣式
"""
Font(
  name=None,# 字型名,可以用字型名字的字串
  strike=None,# 刪除線,True/False
  color=None,# 文字顏色
  size=None,# 字號
  bold=None,# 加粗,True/False
  italic=None,# 傾斜,Tue/False
  underline=None # 下劃線,'singleAccounting','double','single','doubleAccounting'
)
"""
# 1:建立字型物件
font1 = Font(
  size=20,italic=True,color="ff0000",bold=True,strike=True
)
# 2:設定指定單元格的字型
# 單元格物件.font = 字型物件
ws["B2"].font = font1

# 3:設定單元格填充樣式
"""
PatternFill(
  fill_type=None,# 設定填充樣式: 'darkGrid','darkTrellis','darkHorizontal','darkGray','lightDown','lightGray','solid','lightGrid','gray125','lightHorizontal','lightTrellis','darkDown','mediumGray','gray0625','darkUp','darkVertical','lightVertical','lightUp'
  start_color=None # 設定填充顏色
)
"""
fill = PatternFill(
  fill_type="solid",start_color="ffff00"
)
ws["B2"].fill = fill

# 設定單元格對齊樣式
al = Alignment(
  horizontal="right",# 水平向方: center 靠左:left 靠右: right
  vertical="top"     # 垂直方向: center,top,bottom
)
ws["B2"].alignment = al

# 設定邊框樣式
# 設定邊物件(四個邊可以是一樣的也可以不同,如果不同就建立多個Side物件)
side = Side(border_style="thin",color="0000ff")
# 設定邊框物件(left、right、top、bottom表示的是邊框的四個邊,這兒四個邊使用的是一個邊物件)
db = Border(left=side,right=side,top=side,bottom=side)
ws["B2"].border = db

# 設定單元格的寬度和高度
# 設定指定列的寬度
ws.column_dimensions["A"].width = 20
# 設定指定行的高度
ws.row_dimensions[1].height = 45

wb.save("test.xlsx")

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。