Python 中使用openpyxl和xlwings都可以读取操作Excel文件,本文主要介绍一下openpyxl和xlwings之间的区别,以及使用的相关示例代码。

1、openpyxl和xlwings区别

1)xlwings依赖于pywin32,而openpyxl不需要

2).xlsx格式的Excel文件本质上是一个压缩文件,包含多个按照微软OOXML规范格式化的XML文件。根据这个规范,则可以创建一个程序,能够直接读写excel文件,就可以通过openpyxl使用Python代码直接读取/写入Excel文件。可以看出openpyxl是只支持.xlsx格式文件。但优点是可以不安装MS Excel软件。

3)Microsoft Excel应用程序可以通过Win32 COM API由外部程序启动和控制。pywin32包提供了Win32 COM和Python之间的接口。通过python脚本和正确的pywin32命令,可以完全控制Excel应用程序(打开Excel文件,从单元格查询数据,向单元格写入数据,保存Excel文件,等等)。xlwings是pywin32的一个用户友好的包装器。它介绍了几个简洁但功能强大的方法。将excel单元格范围直接转换为numpy Array或 Pandas Dataframe。所以使用xlwings是可以支持.xls.xlsx,但电脑上必须安装MS Excel软件。

2、openpyxl使用示例代码

import datetime
from random import choice
from time import time
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
# 设置文件 mingc
fileName = "openpyxl.xlsx"
# 打开文件
wb = load_workbook(fileName)
# 创建一张新表
ws = wb.create_sheet()
# 第一行输入
ws.append(['TIME', 'TITLE', 'A-Z'])
# 输入内容(500行数据)
for i in range(500):
    TIME = datetime.datetime.now().strftime("%H:%M:%S")
    TITLE = str(time())
    A_Z = get_column_letter(choice(range(1, 50)))
    ws.append([TIME, TITLE, A_Z])
# 获取最大行
row_max = ws.max_row
# 获取最大列
con_max = ws.max_column
# 把上面写入内容打印在控制台
for j in ws.rows:    # we.rows 获取每一行数据
    for n in j:
        print(n.value, end="\t")   # n.value 获取单元格的值
    print()
# 保存,save(必须要写文件名(绝对地址)默认 py 同级目录下,只支持 xlsx 格式)
wb.save(fileName)

3、xlwings使用示例代码

#coding=utf-8
import xlwings as xw
import pandas as pd
import time
start_row = 2 # 处理Excel文件开始行
end_row = 10002 # 处理Excel结束行
#记录打开表单开始时间
start_open_time = time.time()
#指定不显示地打开Excel,读取Excel文件
app = xw.App(visible=False, add_book=False)
wb = app.books.open('D://demo.xlsx') # 打开Excel文件
sheet = wb.sheets[0]  # 选择第0个表单
#记录打开Excel表单结束时间
end_open_time = time.time()
#记录开始循环计算时间
start_run = time.time()
row_content = []
#读取Excel表单前10000行的数据,Python的in range是左闭右开的,到10002结束,但区间只包含2到10001这一万条
for row in range(start_row, end_row):
    row_str = str(row)
    #循环中引用Excel的sheet和range的对象,读取B列和C列的每一行的值,对比计算
    start_value = sheet.range('B' + row_str).value
    end_value = sheet.range('C' + row_str).value
    if start_value <= end_value:
        values = end_value - start_value
        #同时测试List数组添加记录
        row_content.append(values)
#计算和
total_values = sum(row_content)
#记录结束循环计算时间
end_run = time.time()
sheet.range('E2').value = str(total_values)
sheet.range('E3').value = '使用Sheet计算时间(秒):' + str(end_run - start_run)
#保存并关闭Excel文件
wb.save()
wb.close()
print ('结果总和:', total_values)
print ('打开并读取Excel表单时间(秒):',   end_open_time - start_open_time)
print ('计算时间(秒):',   end_run - start_run)
print ('处理数据条数:' , len(row_content))

推荐文档