Excel 是 Windows 环境下流行的、强大的电子表格应用。openpyxl 模块让 Python 程序能读取和修改 Excel 电子表格文件。例如,可能有一个无聊的任务,需要从一个电子表格拷
贝一些数据,粘贴到另一个电子表格中。或者可能需要从几千行中挑选几行,根据某种条件稍作修改。或者需要查看几百份部门预算电子表格,寻找其中的赤字。正是这种无聊无脑的电子表格任务,可以通过 Python 来完成。

1. 读取电子表格

import openpyxl # 第三方模块
wb = openpyxl.load_workbook('D:\学习成长\宁夏服务台采集监控接口.xlsx') #openpyxl.load_workbook()函数接受文件名,返回一个 workbook 数据类型的值。

print(type(wb)) # 打印wb的类型,应为openpyxl.workbook.workbook.Workbook

print(wb.sheetnames) # 打印工作簿中所有工作表的名称

sheet = wb['表模型配置接口(日全量)'] # 获取名为'Sheet1'的工作表,并赋值给变量sheet

print(type(sheet)) # 打印sheet的类型,应为openpyxl.worksheet.worksheet.Worksheet

print(sheet.title) # 打印工作表的标题

2.从工作簿中读取工作表

import openpyxl

wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.active # 获取活动工作表
print(sheet.title) # 获取工作表名称

从工作表中取得单元格

import openpyxl

wb = openpyxl.load_workbook('D:\学习成长\宁夏服务台采集监控接口.xlsx')
sheet = wb.active

cell = sheet['A1'] # 获取单元格A1
print(cell.value) # 打印单元格A1的值

cell = sheet.cell(row=2, column=1) # 获取单元格A1
print(cell.value) # 打印单元格A1的值

3.工作簿、工作表、单元格

  openpyxl 模块使用工作簿、工作表和单元格这三个术语来表示 Excel 文件中的不同部分。工作簿(workbook)是电子表格文件,工作表(worksheet)是工作簿中的单个表,单元格(cell)是工作表中的单个方格。工作簿、工作表和单元格这三个术语来自电子表格的术语,在 Python 中使用它们来表示 Excel 文件中的相应部分。

3. 遍历工作表中的单元格

import openpyxl

wb = openpyxl.load_workbook('D:\学习成长\宁夏服务台采集监控接口.xlsx')
sheet = wb.active

for row in sheet['A1':'C3']:
    for cell in row:
        print(cell.coordinate, cell.value)

• 比较一个电子表格中多行的数据。

import pandas as pd

# 读取Excel文件
file_path = 'your_excel_file.xlsx'  # 替换为你的Excel文件路径
df = pd.read_excel(file_path)

# 显示数据框的前几行
print("Excel 数据:")
print(df.head())

# 比较多行数据
rows_to_compare = [0, 1, 2]  # 替换为你想比较的行索引
comparison_result = df.iloc[rows_to_compare]

print("比较的行数据:")
print(comparison_result)

# 检查所有列是否相同
all_columns_same = comparison_result.apply(lambda x: x.nunique() == 1, axis=0)
print("所有列是否相同:")
print(all_columns_same)

# 检查每一列是否相同
each_column_same = comparison_result.apply(lambda x: x.nunique() == 1, axis=1)
print("每一列是否相同:")
print(each_column_same)

• 打开多个 Excel 文件,跨电子表格比较数据。

import pandas as pd

# 定义要打开的Excel文件列表
file_paths = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx']  # 替换为你的Excel文件路径列表

# 读取所有Excel文件并存储在字典中
dataframes = {file: pd.read_excel(file) for file in file_paths}

# 显示每个数据框的前几行
for file, df in dataframes.items():
    print(f"{file} 的前几行数据:")
    print(df.head())
    print()

# 比较特定列的数据
column_to_compare = '列名'  # 替换为你想比较的列名
comparison_data = [df[column_to_compare] for df in dataframes.values()]

# 使用pandas.concat将所有数据合并到一个DataFrame中
comparison_df = pd.concat(comparison_data, keys=file_paths, names=['文件', '行索引'])

# 显示合并后的数据
print("合并后的比较数据:")
print(comparison_df)

# 检查特定列是否相同
all_same = comparison_df.xs(column_to_compare, level=1, axis=1).apply(lambda x: x.nunique() == 1)
print("特定列是否相同:")
print(all_same)

• 检查电子表格是否有空行或无效的数据,如果有就警告。

import pandas as pd

# 读取Excel文件
file_path = 'your_excel_file.xlsx'  # 替换为你的Excel文件路径
df = pd.read_excel(file_path)

# 显示数据框的前几行
print("Excel 数据:")
print(df.head())

# 检查是否有空行
empty_rows = df.isnull().all(axis=1)
if empty_rows.any():
    print("警告: 存在空行!")
else:
    print("没有空行。")

# 检查是否有无效的数据(例如,特定列中的非数字数据)
# 假设我们检查 'Age' 列是否包含非数字数据
invalid_data = pd.to_numeric(df['Age'], errors='coerce').isnull()
if invalid_data.any():
    print("警告: 'Age' 列包含无效数据!")
else:
    print("'Age' 列没有无效数据。")

# 检查整个数据框是否有任何无效数据
invalid_data_anywhere = df.isnull().values.any()
if invalid_data_anywhere:
    print("警告: 数据框中存在无效数据!")
else:
    print("数据框中没有无效数据。")

• 从电子表格中读取数据,将它作为 Python 程序的输入。

import pandas as pd

# 读取Excel文件
file_path = 'your_excel_file.xlsx'  # 替换为你的Excel文件路径
df = pd.read_excel(file_path)

# 显示数据框的前几行
print("Excel 数据:")
print(df.head())

# 假设我们要将 '列名' 列的数据作为程序的输入
# 替换 '列名' 为你实际的列名
input_data = df['列名'].tolist()

# 现在 input_data 是一个包含 '列名' 列所有数据的列表
# 你可以将其作为程序的输入进行进一步处理
print("程序输入数据:")
print(input_data)

# 示例:计算输入数据的平均值
if input_data:  # 确保列表不为空
    average_value = sum(input_data) / len(input_data)
    print(f"输入数据的平均值是: {average_value}")
else:
    print("输入数据为空,无法计算平均值。")

4.创建并保存 Excel 文档

import openpyxl
wb = openpyxl.Workbook() # 创建一个新的工作簿   这只是在内存中创建了一个新的工作簿,还没有保存到文件中
ws1 = wb.active # 获取工作簿的活动工作表
ws1.title = 'test1' # 设置工作表的标题
ws2 = wb.create_sheet(title='test2') # 创建一个新的工作表,并设置标题为'test2'
ws3 = wb.create_sheet(title='test3') # 创建一个新的工作表,并设置标题为'test3'
ws4 = wb.create_sheet(title='test4') # 创建一个新的工作表,并设置标题为'test4'
wb.save('D:\学习成长\example_create.xlsx') # 保存工作簿到文件example.xlsx
# 这种创建它不会自动保存,需要调用save()方法保存到文件中
# 给sheet1添加一些数据
ws1['A1'] = 'Talleres'
ws1['B1'] = 'México'
ws1['A2'] = 'Fórmula E'
ws1['B2'] = 'España'

# 给sheet2添加一些数据
# 往工作表中添加数据有很多种方法
ws2.append(['Talleres', 'México'])
ws2.append(['Fórmula E', 'España'])
# 往sheet3添加一些数据
data = [
    ['Talleres', 'Data1', 'Data2'],
    ['Workshop', 'Data3', 'Data4']
]

for row in data:
    ws3.append(row)

wb.save('D:\学习成长\example_create.xlsx') # 保存工作簿到文件example.xlsx

5.更新一个电子表格

• 循环遍历所有行。
• 如果该行是 Garlic、Celery 或 Lemons,更新价格。
这意味着代码需要做下面的事情:
• 打开电子表格文件。
• 针对每一行,检查列 A 的值是不是 Celery、Garlic 或 Lemon。
• 如果是,更新列 B 中的价格。
• 将该电子表格保存为一个新文件(这样就不会丢失原来的电子表格,以防万一)

import openpyxl

# 加载Excel文件
file_path = 'D:\学习成长\example_create.xlsx'  # 替换为你的Excel文件路径
wb = openpyxl.load_workbook(file_path)

# 选择工作表
ws = wb.active  # 获取活动工作表
# 或者通过名称选择工作表
# ws = wb['SheetName']

# 创建一个字典来存储更新后的价格
price_updates = {
    'Celery': 1.99,
    'Garlic': 2.49,
    'Lemon': 0.99
}

# 遍历工作表中的所有行
for row in ws.iter_rows(min_row=2, values_only=False):  # 从第二行开始,跳过标题行
    cell_a = row[0]  # 获取列A的单元格
    cell_b = row[1]  # 获取列B的单元格

    # 检查列A的值是否在字典的键中
    if cell_a.value in price_updates:
        # 更新列B中的价格为字典中对应的值
        cell_b.value = price_updates[cell_a.value]
    if cell_a.value is None or cell_a.value == '':
        ws.delete_rows(cell_a.row)

# 指定新文件的保存路径
new_file_path = 'D:\学习成长\example_create1.xlsx'  # 替换为你想要保存的新文件路径

# 保存更改到新文件
wb.save(new_file_path)

6.从电子表格中删除数据

import openpyxl
# 打开现有的Excel文件
file_path = 'your_excel_file.xlsx'  # 替换为你的Excel文件路径
wb = openpyxl.load_workbook(file_path)

# 选择要操作的工作表
sheet_name = 'Sheet1'  # 替换为你的工作表名称
ws = wb[sheet_name]

# 删除A1单元格
ws.delete_rows(1)  # 删除第一行
ws.delete_cols(1)  # 删除第一列

# 保存更改
wb.save(file_path)

7.从电子表格中提取数据

• 从电子表格中提取数据,将其作为 Python 程序的输入。

import pandas as pd

# 读取Excel文件
file_path = 'your_excel_file.xlsx'  # 替换为你的Excel文件路径
df = pd.read_excel(file_path)

# 显示数据框的前几行
print("Excel 数据:")
print(df.head())

# 假设我们要将 '列名' 列的数据作为程序的输入
# 替换 '列名' 为你实际的列名
input_data = df['列名'].tolist()

# 现在 input_data 是一个包含 '列名' 列所有数据的列表
# 你可以将其作为程序的输入进行进一步处理
print("程序输入数据:")
print(input_data)

# 示例:计算输入数据的平均值
if input_data:  # 确保列表不为空
    average_value = sum(input_data) / len(input_data)
    print(f"输入数据的平均值是: {average_value}")
else:
    print("输入数据为空,无法计算平均值。")

8.将数据写入电子表格

• 将数据写入电子表格,作为程序输出的一部分。

import pandas as pd

# 创建一个数据框
data = {'Name': ['Tom', 'Nick', 'John'],
        'Age': [28, 32, 25],
        'City': ['New York', 'Paris', 'London']}
df = pd.DataFrame(data)

# 将数据框写入Excel文件
output_file_path = 'output.xlsx'  # 替换为你想要保存的文件路径
df.to_excel(output_file_path, index=False)

9.处理电子表格中的公式

• 在电子表格中创建和更新公式。
• 计算电子表格中的公式。

import openpyxl

# 打开现有的Excel文件
file_path = 'your_excel_file.xlsx'  # 替换为你的Excel文件路径
wb = openpyxl.load_workbook(file_path)

# 选择要操作的工作表
sheet_name = 'Sheet1'  # 替换为你的工作表名称
ws = wb[sheet_name]

# 在单元格中创建公式
ws['A1'] = 10
ws['B1'] = 20
ws['C1'] = '=A1+B1'  # 在C1单元格中创建一个公式,计算A1和B1的和

# 保存更改
wb.save(file_path)

10.处理电子表格中的图表

• 在电子表格中创建和更新图表。
• 更新图表的数据源。

import openpyxl
from openpyxl.chart import BarChart, Reference

# 打开现有的Excel文件
file_path = 'your_excel_file.xlsx'  # 替换为你的Excel文件路径
wb = openpyxl.load_workbook(file_path)

# 选择要操作的工作表
sheet_name = 'Sheet1'  # 替换为你的工作表名称
ws = wb[sheet_name]

# 创建一个柱状图
chart = BarChart()
chart.title = "Sample Bar Chart"
chart.x_axis.title = "X Axis"
chart.y_axis.title = "Y Axis"

# 指定图表的数据源
data = Reference(ws, min_col=1, min_row=1, max_col=2, max_row=4)
categories = Reference(ws, min_col=1, min_row=2, max_row=4)
chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)

# 将图表添加到工作表中
ws.add_chart(chart, "E5")

# 保存更改
wb.save(file_path)

11.处理电子表格中的图片

• 在电子表格中插入和删除图片。
• 更新图片的位置和大小。

import openpyxl
from openpyxl.drawing.image import Image

# 打开现有的Excel文件
file_path = 'your_excel_file.xlsx'  # 替换为你的Excel文件路径
wb = openpyxl.load_workbook(file_path)

# 选择要操作的工作表
sheet_name = 'Sheet1'  # 替换为你的工作表名称
ws = wb[sheet_name]

# 插入图片
image_path = 'your_image_file.png'  # 替换为你的图片文件路径
img = Image(image_path)
ws.add_image(img, 'A1')

# 保存更改
wb.save(file_path)

12.处理电子表格中的宏

• 在电子表格中运行宏。
• 创建和编辑宏。

import openpyxl

# 打开现有的Excel文件
file_path = 'your_excel_file.xlsx'  # 替换为你的Excel文件路径
wb = openpyxl.load_workbook(file_path)

# 选择要操作的工作表
sheet_name = 'Sheet1'  # 替换为你的工作表名称
ws = wb[sheet_name]

# 运行宏
# 假设你的宏名称为 "MyMacro"
ws['A1'].value = "Hello, World!"
ws['A2'].value = "This is a macro example."

# 保存更改
wb.save(file_path)

13.处理电子表格中的条件格式

• 在电子表格中应用条件格式。
• 更新条件格式规则。

import openpyxl
from openpyxl.styles import PatternFill

# 打开现有的Excel文件
file_path = 'your_excel_file.xlsx'  # 替换为你的Excel文件路径
wb = openpyxl.load_workbook(file_path)

# 选择要操作的工作表
sheet_name = 'Sheet1'  # 替换为你的工作表名称
ws = wb[sheet_name]

# 应用条件格式
red_fill = PatternFill(start_color="FFFF0000",
                        end_color="FFFF0000",
                        fill_type="solid")
for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=1, max_col=ws.max_column):
    for cell in row:
        if cell.value > 50:  # 假设我们只对大于50的值应用条件格式
            cell.fill = red_fill

# 保存更改
wb.save(file_path)

14.处理电子表格中的数据验证

• 在电子表格中设置数据验证规则。
• 更新数据验证规则。

import openpyxl
from openpyxl.worksheet.datavalidation import DataValidation

# 打开现有的Excel文件
file_path = 'your_excel_file.xlsx'  # 替换为你的Excel文件路径
wb = openpyxl.load_workbook(file_path)

# 选择要操作的工作表
sheet_name = 'Sheet1'  # 替换为你的工作表名称
ws = wb[sheet_name]

# 设置数据验证规则
dv = DataValidation(type="list", formula1='"Option1,Option2,Option3"', showDropDown=True)
ws.add_data_validation(dv)

# 应用数据验证规则到指定单元格范围
dv.add(ws['A1:A10'])

# 保存更改
wb.save(file_path)

15.处理电子表格中的超链接

• 在电子表格中插入和删除超链接。
• 更新超链接的目标。

import openpyxl

# 打开现有的Excel文件
file_path = 'your_excel_file.xlsx'  # 替换为你的Excel文件路径
wb = openpyxl.load_workbook(file_path)

# 选择要操作的工作表
sheet_name = 'Sheet1'  # 替换为你的工作表名称
ws = wb[sheet_name]

# 插入超链接
ws['A1'].hyperlink = 'https://www.example.com'

# 保存更改
wb.save(file_path)

16.处理电子表格中的批注

• 在电子表格中插入和删除批注。
• 更新批注的内容。

import openpyxl

# 打开现有的Excel文件
file_path = 'your_excel_file.xlsx'  # 替换为你的Excel文件路径
wb = openpyxl.load_workbook(file_path)

# 选择要操作的工作表
sheet_name = 'Sheet1'  # 替换为你的工作表名称
ws = wb[sheet_name]

# 插入批注
comment = "This is a comment."
ws['A1'].comment = openpyxl.comments.Comment(comment, "Author")

# 保存更改
wb.save(file_path)
posted on 2025-03-23 17:21  Martinl_it  阅读(39)  评论(0)    收藏  举报