【打开已有工作簿的两种方法及使用区别】

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("数据处理并写入完成")

代码解释

  1. 导入必要的库:导入 xlwings 用于与 Excel 应用程序交互,导入 openpyxl 的 load_workbook 函数用于读取 Excel 文件。
  2. 使用 xlwings 进行初始操作
    • 启动 Excel 应用程序,以不可见模式打开指定的 Excel 文件。
    • 选择第一个工作表,并在 A1 单元格写入数据 原始数据
    • 保存更改后关闭工作簿并退出 Excel 应用程序。
  3. 使用 openpyxl 读取和处理数据
    • 使用 load_workbook 函数加载 Excel 文件。
    • 获取活动工作表,并遍历 A 列的数据,将其存储在 column_a_data 列表中。
    • 对 column_a_data 列表中的每个数据添加前缀 处理后: ,得到 processed_data 列表。
  4. 使用 xlwings 写入处理后的数据
    • 再次启动 Excel 应用程序,以不可见模式打开指定的 Excel 文件。
    • 选择第一个工作表,并将 processed_data 列表中的数据逐行写入 B 列。
    • 保存更改后关闭工作簿并退出 Excel 应用程序。
  5. 打印完成信息:打印提示信息,表示数据处理并写入操作已完成。

注意事项

  • 请确保指定的文件路径 E:\example.xlsx 存在,或者根据实际情况修改文件路径。
  • 代码中使用的文件路径为 Windows 系统的路径格式,如果你使用的是其他操作系统,请相应地调整路径分隔符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值