import xlwings as xw
# 第一种方式 xlwings
# 启动excel 应用程序
app = xw.App(visible=True, add_book=False)
file_path = r"E:\test.xlsx"
app.books.open(file_path)
print("完成")
# 第二种方式 openpyxl
import openpyxl
file_path = r"E:\test.xlsx"
workwork = openpyxl.load_workbook(file_path)
sheet = workwork["Sheet1"]
print(sheet["A1"].value) # 编号
print("完成")
以下是对这段代码的详细说明,代码包含了使用 xlwings
和 openpyxl
两种库来操作 Excel 文件的部分。
整体功能概述
这段代码分别使用 xlwings
和 openpyxl
两个 Python 库来打开指定路径下的 Excel 文件。xlwings
用于在可见的 Excel 应用程序中打开文件,而 openpyxl
用于在 Python 环境中直接读取 Excel 文件的内容,这里读取了工作表 Sheet1
中单元格 A1
的值。
代码逐行解释
1. 使用 xlwings
打开 Excel 文件
import xlwings as xw
# 第一种方式 xlwings
# 启动 excel 应用程序
app = xw.App(visible=True, add_book=False)
file_path = r"E:\test.xlsx"
app.books.open(file_path)
print("完成")
- 导入
xlwings
库:
导入 xlwings
库并将其重命名为 xw
,方便后续使用该库的功能。xlwings
是一个用于在 Python 中与 Excel 进行交互的库,它可以启动 Excel 应用程序并对其进行操作。
- 启动 Excel 应用程序:
app = xw.App(visible=True, add_book=False)
使用 xw.App()
创建一个 Excel 应用程序实例。visible=True
表示打开 Excel 应用程序时会显示 Excel 窗口,add_book=False
表示启动时不自动创建新的工作簿。
- 指定文件路径:
file_path = r"E:\test.xlsx"
定义一个变量 file_path
,使用原始字符串(前面加 r
)来指定要打开的 Excel 文件的路径,这样可以避免反斜杠 \
被当作转义字符处理。
- 打开 Excel 文件:
app.books.open(file_path)
调用 app.books.open()
方法,在已启动的 Excel 应用程序中打开指定路径的 Excel 文件。
- 打印完成信息:
print("完成")
打印一条提示信息,表示使用 xlwings
打开文件的操作完成。
2. 使用 openpyxl
打开并读取 Excel 文件
# 第二种方式 openpyxl
import openpyxl
file_path = r"E:\test.xlsx"
workbook = openpyxl.load_workbook(file_path)
sheet = workbook["Sheet1"]
print(sheet["A1"].value)
print("完成")
- 导入
openpyxl
库:
import openpyxl
导入 openpyxl
库,它是一个用于读写 Excel 文件(.xlsx
、.xlsm
、.xltx
、.xltm
)的 Python 库。
- 指定文件路径:
file_path = r"E:\test.xlsx"
再次指定要打开的 Excel 文件的路径。
- 加载 Excel 文件:
workbook = openpyxl.load_workbook(file_path)
使用 openpyxl.load_workbook()
函数加载指定路径的 Excel 文件,并将其赋值给变量 workbook
。
- 选择工作表:
sheet = workbook["Sheet1"]
从加载的工作簿中选择名为 Sheet1
的工作表,并将其赋值给变量 sheet
。
- 读取单元格的值:
print(sheet["A1"].value)
打印工作表 Sheet1
中单元格 A1
的值。
- 打印完成信息:
print("完成")
打印一条提示信息,表示使用 openpyxl
读取文件的操作完成。
潜在问题
- 文件路径问题:代码中指定的文件路径
E:\test.xlsx
必须存在,否则会抛出FileNotFoundError
异常。 - 工作表名称问题:使用
openpyxl
时,代码假设 Excel 文件中存在名为Sheet1
的工作表,如果不存在,会抛出KeyError
异常。
为了提高代码的健壮性,可以添加异常处理机制,例如:
import xlwings as xw
import openpyxl
try:
# 第一种方式 xlwings
app = xw.App(visible=True, add_book=False)
file_path = r"E:\test.xlsx"
app.books.open(file_path)
print("xlwings 完成")
except FileNotFoundError:
print("xlwings: 文件未找到")
try:
# 第二种方式 openpyxl
file_path = r"E:\test.xlsx"
workbook = openpyxl.load_workbook(file_path)
sheet = workbook["Sheet1"]
print(sheet["A1"].value)
print("openpyxl 完成")
except FileNotFoundError:
print("openpyxl: 文件未找到")
except KeyError:
print("openpyxl: 未找到指定工作表")
这样,当出现文件不存在或工作表不存在的情况时,程序会输出相应的错误信息,而不会直接崩溃。
xlwings
和 openpyxl
使用区别
1. 底层交互方式
xlwings
:它是通过与 Excel 应用程序进行交互来实现对 Excel 文件的操作。也就是说,xlwings
会启动一个真实的 Excel 进程(无论是可见还是隐藏),借助 Excel 的原生功能来完成文件的读写、格式设置等操作。这使得它能够处理一些复杂的 Excel 功能,如宏的运行、图表的创建和操作等。openpyxl
:它是一个纯 Python 库,直接对 Excel 文件(.xlsx
格式)进行读写操作,不需要依赖 Excel 应用程序。它通过解析和生成 Excel 文件的 XML 结构来实现数据的处理,因此在没有安装 Excel 的环境中也能正常使用。
2. 功能特性
xlwings
- 界面交互:可以控制 Excel 应用程序窗口的显示和隐藏,支持与用户进行交互,例如在 Excel 中显示自定义的对话框、菜单等。
- 宏支持:能够直接运行 Excel 中的宏,方便集成已有的 VBA 代码。
- 图表和图形处理:可以创建、修改和操作 Excel 中的图表、图形等对象。
openpyxl
- 数据处理:专注于数据的读写和基本的格式设置,对于大规模数据的处理效率较高。
- 轻量级操作:由于不依赖 Excel 应用程序,在资源占用方面相对较少,适合在服务器环境中进行批量数据处理。
3. 代码复杂度
xlwings
:代码相对简洁,因为它的操作方式更接近 Excel 的实际操作。例如,打开文件、选择工作表等操作都与在 Excel 中手动操作的步骤相似。openpyxl
:代码可能会稍微复杂一些,特别是在处理复杂的格式设置和对象操作时,需要对 Excel 文件的 XML 结构有一定的了解。
4. 文件格式支持
xlwings
:支持多种 Excel 文件格式,包括.xlsx
、.xls
等,并且可以处理 Excel 的各种高级功能。openpyxl
:主要支持.xlsx
格式的文件,对于.xls
等旧格式文件不支持。
同类案例
使用 xlwings
读取多个 Excel 文件并汇总数据
import xlwings as xw
import os
# 定义文件所在目录
folder_path = r'E:\excel_files'
# 启动 Excel 应用程序
app = xw.App(visible=False, add_book=False)
# 初始化汇总数据
total_data = []
# 遍历目录下的所有 Excel 文件
for file_name in os.listdir(folder_path):
if file_name.endswith('.xlsx') or file_name.endswith('.xls'):
file_path = os.path.join(folder_path, file_name)
# 打开文件
workbook = app.books.open(file_path)
# 获取第一个工作表
sheet = workbook.sheets[0]
# 获取数据范围
data_range = sheet.used_range
# 获取数据值
data = data_range.value
# 将数据添加到汇总数据中
total_data.extend(data)
# 关闭文件
workbook.close()
# 创建新的工作簿用于保存汇总数据
new_workbook = app.books.add()
new_sheet = new_workbook.sheets[0]
# 将汇总数据写入新工作表
new_sheet.range('A1').value = total_data
# 保存新工作簿
new_workbook.save(r'E:\汇总数据.xlsx')
# 关闭新工作簿
new_workbook.close()
# 退出 Excel 应用程序
app.quit()
print("数据汇总完成")
使用 openpyxl
创建一个包含图表的 Excel 文件
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
# 创建一个新的工作簿
workbook = Workbook()
# 获取活动工作表
sheet = workbook.active
# 写入数据
data = [
['产品', '销售额'],
['产品 A', 1000],
['产品 B', 2000],
['产品 C', 1500]
]
for row in data:
sheet.append(row)
# 创建一个柱状图
chart = BarChart()
chart.title = '产品销售额'
chart.x_axis.title = '产品'
chart.y_axis.title = '销售额'
# 设置图表的数据范围
data = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=4)
categories = Reference(sheet, min_col=1, min_row=2, max_row=4)
# 将数据和类别添加到图表中
chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)
# 将图表放置在工作表的 D1 单元格
sheet.add_chart(chart, 'D1')
# 保存工作簿
workbook.save(r'E:\图表示例.xlsx')
print("图表创建完成")
这两个案例分别展示了 xlwings
和 openpyxl
在不同场景下的应用,你可以根据实际需求选择合适的库。
写一段代码,将xlwings和openpyxl结合起来使用
下面为你提供一个结合使用 xlwings
和 openpyxl
的示例代码。此代码的功能是先使用 xlwings
打开一个 Excel 文件并对其进行一些操作,然后使用 openpyxl
读取该文件的数据并进行进一步处理,最后再使用 xlwings
将处理后的数据写回到 Excel 文件中。
示例代码
import xlwings as xw
from openpyxl import load_workbook
# 定义文件路径
file_path = r'E:\example.xlsx'
# 使用 xlwings 打开 Excel 文件并进行操作
# 启动 Excel 应用程序
app = xw.App(visible=False, add_book=False)
workbook = app.books.open(file_path)
sheet = workbook.sheets[0]
# 在 A1 单元格写入数据
sheet.range('A1').value = '原始数据'
# 保存更改
workbook.save()
workbook.close()
app.quit()
# 使用 openpyxl 读取文件并处理数据
wb = load_workbook(file_path)
ws = wb.active
# 获取 A 列的数据
column_a_data = []
for row in ws.iter_rows(min_row=1, max_col=1, values_only=True):
column_a_data.append(row[0])
# 对数据进行简单处理,例如添加前缀
processed_data = [f'处理后: {data}' for data in column_a_data]
# 再次使用 xlwings 打开文件并写入处理后的数据
app = xw.App(visible=False, add_book=False)
workbook = app.books.open(file_path)
sheet = workbook.sheets[0]
# 将处理后的数据写入 B 列
for i, value in enumerate(processed_data, start=1):
sheet.range(f'B{i}').value = value
# 保存更改
workbook.save()
workbook.close()
app.quit()
print("数据处理并写入完成")
代码解释
- 导入必要的库:导入
xlwings
用于与 Excel 应用程序交互,导入openpyxl
的load_workbook
函数用于读取 Excel 文件。 - 使用
xlwings
进行初始操作:- 启动 Excel 应用程序,以不可见模式打开指定的 Excel 文件。
- 选择第一个工作表,并在 A1 单元格写入数据
原始数据
。 - 保存更改后关闭工作簿并退出 Excel 应用程序。
- 使用
openpyxl
读取和处理数据:- 使用
load_workbook
函数加载 Excel 文件。 - 获取活动工作表,并遍历 A 列的数据,将其存储在
column_a_data
列表中。 - 对
column_a_data
列表中的每个数据添加前缀处理后:
,得到processed_data
列表。
- 使用
- 使用
xlwings
写入处理后的数据:- 再次启动 Excel 应用程序,以不可见模式打开指定的 Excel 文件。
- 选择第一个工作表,并将
processed_data
列表中的数据逐行写入 B 列。 - 保存更改后关闭工作簿并退出 Excel 应用程序。
- 打印完成信息:打印提示信息,表示数据处理并写入操作已完成。
注意事项
- 请确保指定的文件路径
E:\example.xlsx
存在,或者根据实际情况修改文件路径。 - 代码中使用的文件路径为 Windows 系统的路径格式,如果你使用的是其他操作系统,请相应地调整路径分隔符。