OpenPyXL教程:获取sheet列表、读取单元格数据、获取行和列的数据

文章目录

  • 一、获取sheet列表
    • 1、方法讲解
    • 2、代码示例
  • 二、读取单元格数据
    • 1、读取单元格数据的步骤
    • 2、代码示例
  • 三、读取不同类型数据
    • 1. 读取文本数据
    • 2. 读取数字数据
    • 3. 读取日期数据
    • 4. 读取布尔值数据
    • 5. 读取空值数据
    • 6. 读取公式数据
    • 7. 读取超链接
  • 四、openpyxl 获取行和列的数据
    • 1、读取步骤
    • 2、代码示例
  • 五、读取行列数据的应用场景
    • 1、数据分析
    • 2、数据导入与导出
    • 3、数据清洗和转换

一、获取sheet列表

当使用openpyxl库来获取Excel文件中的工作表列表时,可以按照以下步骤进行操作。我会逐步解释每一步:

1、方法讲解

(1)、导入openpyxl库:

import openpyxl

(2)、打开Excel文件:

# 指定Excel文件路径
excel_file_path = r'E:\UserData\Desktop\border_example.xlsx'

# 打开工作簿
workbook = openpyxl.load_workbook(excel_file_path)

(3)、获取工作表名称列表:

# 获取工作表名称列表
sheet_names = workbook.sheetnames

(4)、打印工作表名称列表:

# 打印工作表名称列表
for sheet_name in sheet_names:
    print("工作表名称:", sheet_name)

2、代码示例

import openpyxl

# 指定Excel文件路径
excel_file_path = r'E:\UserData\Desktop\border_example.xlsx'

# 打开工作簿
workbook = openpyxl.load_workbook(excel_file_path)

# 获取工作表名称列表
sheet_names = workbook.sheetnames

# 打印工作表名称列表
for sheet_name in sheet_names:
    print("工作表名称:", sheet_name)

这个示例代码会打开指定的Excel文件,获取其中的工作表名称列表,并逐个打印出每个工作表的名称。

输出结果:

runfile('E:/UserData/Desktop/Excel/untitled1.py', wdir='E:/UserData/Desktop/Excel')
工作表名称: Sheet
工作表名称: Sheet1
工作表名称: Sheet2
工作表名称: Sheet3
工作表名称: Sheet4

二、读取单元格数据

1、读取单元格数据的步骤

(1)、导入所需的库:

首先,你需要导入openpyxl库。这就像是你要使用工具箱里的一个工具,这样你就可以处理Excel文件了。

(2)加载Excel文件:

使用load_workbook函数加载你的Excel文件。就好像打开一本书一样。

(3)选择工作表:

使用active属性或者通过名字选择要读取数据的工作表。就好像翻开这本书的某一页。

(4)读取数据:

使用工作表的单元格标识(比如"A1")来获取特定单元格的数据。

2、代码示例

import openpyxl
import datetime

# 加载Excel文件
workbook = openpyxl.load_workbook(r'E:\UserData\Desktop\border_example.xlsx')

# 选择工作表
sheet = workbook.active

# 读取文本数据
text_cell = sheet['A1']
text_data = text_cell.value
print("文本数据:", text_data)

# 读取数字数据
number_cell = sheet['B1']
number_data = number_cell.value
print("数字数据:", number_data)

# 读取日期数据
date_cell = sheet['C1']
date_data = date_cell.value
formatted_date = date_data.strftime("%Y-%m-%d")
print("日期数据:", formatted_date)

执行结果:

runcell(0, 'E:/UserData/Desktop/Excel/untitled1.py')
文本数据: Hello, Excel!
数字数据: 42
日期数据: 2023-08-17

三、读取不同类型数据

1. 读取文本数据

如果单元格中是文本,你可以直接使用.value来获取文本数据。

cell = sheet['A1']
text_data = cell.value
print("文本数据:", text_data)

2. 读取数字数据

如果单元格中是数字,也是使用.value,但是注意数字是没有引号的。

cell = sheet['B1']
number_data = cell.value
print("数字数据:", number_data)

3. 读取日期数据

处理日期略微不同。你需要导入datetime模块,并使用.value属性获取日期对象。

import datetime

cell = sheet['C1']
date_data = cell.value
print("日期数据:", date_data.strftime("%Y-%m-%d"))

4. 读取布尔值数据

如果单元格中包含布尔值(TRUE 或 FALSE),你可以像读取其他数据类型一样使用.value来获取它们。

bool_cell = sheet['D1']
bool_data = bool_cell.value
print("布尔值数据:", bool_data)

5. 读取空值数据

有时单元格可能是空的,没有任何数据。在这种情况下,.value将返回None,表示空值。

empty_cell = sheet['E1']
empty_data = empty_cell.value
print("空值数据:", empty_data)

6. 读取公式数据

Excel 还支持在单元格中使用公式。你可以通过.value获取计算后的结果,或者通过.formula获取原始公式。

formula_cell = sheet['F1']
formula_result = formula_cell.value
formula_original = formula_cell.formula
print("公式计算结果:", formula_result)
print("原始公式:", formula_original)

7. 读取超链接

如果要读取单元格中的超链接,你可以使用hyperlinks属性来获取链接的信息:

hyperlink_cell = sheet['G1']
hyperlink_info = hyperlink_cell.hyperlink  # 获取超链接信息

if hyperlink_info:
    print("超链接数据:", hyperlink_info)
else:
    print("该单元格没有超链接.")

四、openpyxl 获取行和列的数据

1、读取步骤

  • 导入所需的库:
from openpyxl import load_workbook
  • 加载Excel文件:
workbook = load_workbook('filename.xlsx')  # 更改为你的文件名和路径
sheet = workbook.active  # 获取活动工作表

或者,如果你知道工作簿中的工作表名称,可以使用下面的代码:

workbook = load_workbook('filename.xlsx')
sheet = workbook['sheetname']  # 更改为你的工作表名称
  • 获取行数据:
row_data = []
for row in sheet.iter_rows():
    row_values = []
    for cell in row:
        row_values.append(cell.value)
    row_data.append(row_values)
  • 获取列数据:
column_data = []
for column in sheet.iter_cols():
    column_values = []
    for cell in column:
        column_values.append(cell.value)
    column_data.append(column_values)

2、代码示例

from openpyxl import load_workbook

# 加载Excel文件
workbook = load_workbook(r'E:\UserData\Desktop\border_example.xlsx')  # 更改为你的文件名和路径
sheet = workbook.active  # 获取活动工作表

# 获取行数据
row_data = []
for row in sheet.iter_rows():
    row_values = []
    for cell in row:
        row_values.append(cell.value)
    row_data.append(row_values)

# 获取列数据
column_data = []
for column in sheet.iter_cols():
    column_values = []
    for cell in column:
        column_values.append(cell.value)
    column_data.append(column_values)

# 打印行数据
print("行数据:")
for row in row_data:
    print(row)

# 打印列数据
print("列数据:")
for column in column_data:
    print(column)

五、读取行列数据的应用场景

1、数据分析

当你需要对Excel表格中的数据进行统计、分析或可视化时,读取行列数据可以帮助你快速获取所需的数据。例如,计算平均值、总和、最大/最小值,或生成图表等。

from openpyxl import load_workbook

# 加载Excel文件
workbook = load_workbook('data.xlsx')
sheet = workbook.active

# 获取某一列数据并计算平均值
column_data = []
for column in sheet.iter_cols(min_row=2, max_row=sheet.max_row, min_col=2, max_col=2):
    column_values = [cell.value for cell in column]
    column_data.extend(column_values)

average = sum(column_data) / len(column_data)
print("平均值:", average)

# 统计每一行的总和
row_sums = []
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, min_col=3, max_col=7):
    row_values = [cell.value for cell in row]
    row_sum = sum(row_values)
    row_sums.append(row_sum)

print("每一行的总和:")
for i, row_sum in enumerate(row_sums, start=2):
    print(f"第{i}行: {row_sum}")

2、数据导入与导出

读取行列数据可以帮助将Excel中的数据导入到其他系统或格式中,或者将其他系统/格式的数据导入到Excel中。例如,将Excel数据导入到数据库中或将数据库数据导出为Excel表格。

from openpyxl import load_workbook

# 加载Excel文件
workbook = load_workbook('data.xlsx')
sheet = workbook.active

# 从Excel中读取数据并写入到CSV文件
import csv

with open('output.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    for row in sheet.iter_rows(values_only=True):
        writer.writerow(row)

3、数据清洗和转换

通过读取行列数据,可以对Excel表格中的数据进行清洗、处理和转换。例如,删除空白行或列,格式化日期,更改数据类型等。

from openpyxl import load_workbook

# 加载Excel文件
workbook = load_workbook('data.xlsx')
sheet = workbook.active

# 删除所有空白行
rows_to_delete = []
for i, row in enumerate(sheet.iter_rows(), start=1):
    if all(cell.value is None for cell in row):
        rows_to_delete.append(i)

for row_index in sorted(rows_to_delete, reverse=True):
    sheet.delete_rows(row_index)

# 格式化日期列
from openpyxl.utils import get_column_letter

date_column = 'A'  # 假设第一列是日期列
for cell in sheet[f'{date_column}']:
    if isinstance(cell.value, datetime.datetime):
        formatted_date = cell.value.strftime('%Y-%m-%d')
        sheet[cell.coordinate] = formatted_date

# 将数值列转换为整数
numeric_columns = ['B', 'C']  # 假设第二列和第三列是数值列
for column in numeric_columns:
    for cell in sheet[f'{column}']:
        if isinstance(cell.value, (float, int)):
            sheet[cell.coordinate] = int(cell.value)

# 保存修改后的Excel文件
workbook.save('modified_data.xlsx')

你可能感兴趣的:(OpenPyXL零基础教程,python,excel)