App下載

如何使用 openpyxl:excel 文件的 python 模塊

暮色上濃妝 2021-08-24 14:06:56 瀏覽數(shù) (3250)
反饋

下面,我為大家?guī)砹艘黄P(guān)于Python中用于excel文件的openpyxl模塊的文章,介紹了openpyxl模塊從安裝到使用的一個(gè)詳細(xì)過程,我們一起來學(xué)習(xí)本篇文章的內(nèi)容。

在開始之前,默認(rèn)各位都已經(jīng)具備了以下的基礎(chǔ)知識(shí):

先決條件
  • Python基礎(chǔ)知識(shí)
  • Excel基礎(chǔ)知識(shí)

我們正在使用的示例 excel 如下:

文件名:sampleData.xlsx

Sheet1: Sheet2:

替換文字
替換文字

安裝 Openpyxl

在 Python 終端中運(yùn)行以下代碼以安裝openpyxl.

你可以選擇 全局安裝 或者在 虛擬機(jī)環(huán)境中 安裝。

pip install openpyxl

安裝后,我們需要把?openpyxl模塊?導(dǎo)入到我們的python代碼中

import openpyxl 

加載工作簿

用下面的代碼來加載我們的第一個(gè)excel文件。

# 加載工作簿

from openpyxl import load_workbook

# 加載對(duì)應(yīng)的excel文件
wb = load_workbook(filename='sampleData.xlsx')

print(wb)  

在上面的代碼導(dǎo)入load_workbook方法讀取excel文件并將其存儲(chǔ)在變量“wb”中

注意,我們正在訪問的文件必須位于我們正在使用的同一文件夾中。

輸出:

替換文字

使用表格

下面的代碼具有以下邏輯:

  • 從我們讀取的 excel 中獲取工作表名稱
  • 顯示哪個(gè)工作表當(dāng)前處于活動(dòng)狀態(tài)
  • 使用索引或工作表名稱激活特定工作表
# 使用表格

from openpyxl import load_workbook

# 加載對(duì)應(yīng)的excel文件
wb = load_workbook(filename='sampleData.xlsx')

# 獲取我們從excel中讀取的工作表名
print(wb.sheetnames)  # OUTPUT: ['Sheet1', 'Sheet2']

# 顯示當(dāng)前使用的工作表
print(wb.active)  # OUTPUT: <Worksheet "Sheet1">

# 我們可以指定要激活的工作表,讓它從索引0,1,從左到右開始,以此類推...
wb.active = 0
print(wb.active)  # OUTPUT: <Worksheet "Sheet1">
wb.active = 1
print(wb.active)  # OUTPUT: <Worksheet "Sheet2">

# 使用工作表名訪問工作表
sheet = wb['Sheet2']
print(sheet)  # OUTPUT: <Worksheet "Sheet2">
print(sheet.title)  # OUTPUT: Sheet2

檢索單元格值

下面的代碼具有以下邏輯:

  • 指定我們需要從中獲取數(shù)據(jù)的工作表和單元格編號(hào)
  • 獲取行索引、列索引、單元格值和單元格坐標(biāo)
# 檢索單元格的值

from openpyxl import load_workbook

# 加載對(duì)應(yīng)的excel文件
wb = load_workbook(filename='sampleData.xlsx')

sheet = wb['Sheet1']

# 從當(dāng)前使用的工作表中我們嘗試獲取B3位置的值
cell_coordinates = sheet['B3']

# 獲取單元格坐標(biāo)的行和列
print(cell_coordinates.value)  # OUTPUT: Jojo
print(cell_coordinates.row)  # OUTPUT: 3
print(cell_coordinates.column)  # OUTPUT: 2
print(cell_coordinates.coordinate)  # OUTPUT: B3

# 如果獲取的單元格是空的
print(sheet['B9'].value)  # OUTPUT: None

# 使用單元格返回值
print(sheet.cell(row=2, column=2).value)  # OUTPUT: Shijo

檢索多個(gè)值

下面的代碼具有以下邏輯:

  • 獲取特定列的數(shù)據(jù)
  • 獲取帶索引/不帶索引的列對(duì)象范圍
  • 獲取行和列對(duì)象
  • 獲取行和列值
# 檢索多個(gè)值

from openpyxl import load_workbook

# 加載對(duì)應(yīng)的excel文件
wb = load_workbook(filename='sampleData.xlsx')

sheet = wb['Sheet2']

# 獲取A列所有有的數(shù)據(jù)
# 輸出: (<Cell 'Sheet2'.A1>, <Cell 'Sheet2'.A2>, <Cell 'Sheet2'.A3>, <Cell 'Sheet2'.A4>, <Cell 'Sheet2'.A5>, <Cell 'Sheet2'.A6>)
print(sheet['A'])

# 獲取不帶索引的列范圍
print(sheet['A:C'])
'''
OUTOUT:
((<Cell 'Sheet2'.A1>, <Cell 'Sheet2'.A2>, <Cell 'Sheet2'.A3>, <Cell 'Sheet2'.A4>, <Cell 'Sheet2'.A5>, <Cell 'Sheet2'.A6>), 
(<Cell 'Sheet2'.B1>, <Cell 'Sheet2'.B2>, <Cell 'Sheet2'.B3>, <Cell 'Sheet2'.B4>, <Cell 'Sheet2'.B5>, <Cell 'Sheet2'.B6>), 
(<Cell 'Sheet2'.C1>, <Cell 'Sheet2'.C2>, <Cell 'Sheet2'.C3>, <Cell 'Sheet2'.C4>, <Cell 'Sheet2'.C5>, <Cell 'Sheet2'.C6>))
'''

# 獲取具有索引的列的范圍
print(sheet['1:3'])
'''
輸出:
((<Cell 'Sheet2'.A1>, <Cell 'Sheet2'.B1>, <Cell 'Sheet2'.C1>), 
(<Cell 'Sheet2'.A2>, <Cell 'Sheet2'.B2>, <Cell 'Sheet2'.C2>), 
(<Cell 'Sheet2'.A3>, <Cell 'Sheet2'.B3>, <Cell 'Sheet2'.C3>))
'''

# 獲取行和列的對(duì)象
for row in sheet.rows:
    print(row)

'''
輸出:
(<Cell 'Sheet2'.A1>, <Cell 'Sheet2'.B1>, <Cell 'Sheet2'.C1>)
(<Cell 'Sheet2'.A2>, <Cell 'Sheet2'.B2>, <Cell 'Sheet2'.C2>)
(<Cell 'Sheet2'.A3>, <Cell 'Sheet2'.B3>, <Cell 'Sheet2'.C3>)
(<Cell 'Sheet2'.A4>, <Cell 'Sheet2'.B4>, <Cell 'Sheet2'.C4>)
(<Cell 'Sheet2'.A5>, <Cell 'Sheet2'.B5>, <Cell 'Sheet2'.C5>)
(<Cell 'Sheet2'.A6>, <Cell 'Sheet2'.B6>, <Cell 'Sheet2'.C6>)
'''

for col in sheet.columns:
    print(col)

'''
輸出:
(<Cell 'Sheet2'.A1>, <Cell 'Sheet2'.A2>, <Cell 'Sheet2'.A3>, <Cell 'Sheet2'.A4>, <Cell 'Sheet2'.A5>, <Cell 'Sheet2'.A6>)
(<Cell 'Sheet2'.B1>, <Cell 'Sheet2'.B2>, <Cell 'Sheet2'.B3>, <Cell 'Sheet2'.B4>, <Cell 'Sheet2'.B5>, <Cell 'Sheet2'.B6>)
(<Cell 'Sheet2'.C1>, <Cell 'Sheet2'.C2>, <Cell 'Sheet2'.C3>, <Cell 'Sheet2'.C4>, <Cell 'Sheet2'.C5>, <Cell 'Sheet2'.C6>)
'''

# 僅顯示值
for row in sheet.iter_rows(values_only=True):
    print(row)

'''
輸出:
('id', 'fruit', 'quantity')
(1, 'Apple', 2)
(2, 'Orange', 5)
(3, 'Pineapple', 3)
(4, 'Banana', 6)
(5, 'Mango', 1)
'''

for col in sheet.iter_cols(values_only=True):
    print(col)

'''
OUTPUT:
('id', 1, 2, 3, 4, 5)
('fruit', 'Apple', 'Orange', 'Pineapple', 'Banana', 'Mango')
('quantity', 2, 5, 3, 6, 1)
'''

將數(shù)據(jù)轉(zhuǎn)換為 Python 結(jié)構(gòu)

# 將數(shù)據(jù)轉(zhuǎn)換為Python結(jié)構(gòu)
import json
from openpyxl import load_workbook

# 加載對(duì)應(yīng)的excel文件
wb = load_workbook(filename='sampleData.xlsx')

sheet = wb['Sheet2']
# 保留excel中的值的空字典
books = {}

for row in sheet.iter_rows(min_row=2, min_col=1, values_only=True):
    book_id = row[0]
    book = {
        'Fruit': row[1],
        'Qty': row[2]
    }
    books[book_id] = book

print(json.dumps(books, indent=3))

'''
輸出:
{
   "1": {
      "Fruit": "Apple",
      "Qty": 2
   },
   "2": {
      "Fruit": "Orange",
      "Qty": 5
   },
   "3": {
      "Fruit": "Pineapple",
      "Qty": 3
   },
   "4": {
      "Fruit": "Banana",
      "Qty": 6
   },
   "5": {
      "Fruit": "Mango",
      "Qty": 1
   }
}
'''


0 人點(diǎn)贊