Skip to main content
 首页 » 编程设计

python之使用python操作excel 2007文件

2025年05月04日22jpfss

我需要使用 python 对 excel 2007 的工作簿执行以下操作:

  1. 删除行
  2. 对工作表进行排序
  3. 从列中获取不同的值

我正在调查 openpyxl ;但是,它的功能似乎有限。

谁能推荐一个可以完成上述任务的库?

请您参考如下方法:

我想先让您知道这只是一个基于 Windows 的解决方案。但是,如果您使用的是 Windows,我建议您使用 Win32Com,可以在 here. 中找到它。该模块使 Python 能够以编程方式访问任何 Microsoft Office 应用程序(包括 Excel),并使用 VBA 中使用的许多相同方法。通常你会做的是记录一个宏(或从内存中记忆)如何在 VBA 中做某事,然后在 Python 中使用相同的函数

首先,我们要连接到 Excel 并以访问第一个工作表为例

#First we need to access the module that lets us connect to Excel 
import win32com.client  
 
# Next we want to create a variable that represents Excel 
app = win32com.client.Dispatch("Excel.Application")    
 
# Lastly we will assume that the workbook is active and get the first sheet 
wbk = app.ActiveWorkbook 
sheet = wbk.Sheets(1) 

此时我们有一个名为 sheet 的变量,它表示我们将使用的 excel 工作表。当然有多种访问工作表的方式,这通常是我演示如何使用 win32com 和 excel 的方式,因为它非常直观。

现在假设我在第一张纸上有以下值,我将逐一讨论如何回答您的问题:

     A     
1   "d" 
2   "c" 
3   "b" 
4   "a" 
5   "c" 

删除行: 假设您要删除事件工作表中的第一行。

sheet.Rows(1).Delete() 

这会创建:

    A 
1   "c" 
2   "b" 
3   "a" 
4   "c" 

下一步让我们按升序对单元格进行排序(尽管我建议将值提取到 python 并在列表中进行排序并将值发回)

rang = sheet.Range("A1","A4") 
sheet.Sort.SetRange(rang) 
sheet.Sort.Apply() 

这会创建:

    A 
1   "a" 
2   "b" 
3   "c" 
4   "c" 

现在我们将从该列中获取不同的值。这里最主要的是如何从单元格中提取值。您可以使用 sheet.Range("A1","A4") 一次选择大量单元格,也可以使用 sheet.Cells(row,列)。 Range 快了几个数量级,但 Cells 更容易调试。

#Get a list of all Values using Range 
valLstRange = [val[0] for val in sheet.Range("A1","A4").Value] 
 
#Get a list of all Values using Cells 
valLstCells = [sheet.Cells(row,1).Value for row in range(1,4)] 
 
#valLstCells and valLstRange both = ["a","b","c","c"] 

现在您终于想要保存工作簿了,您可以使用以下方法来完成此操作:

wbk.SaveAs("C:/savedWorkbook.xlsx") 

大功告成!

关于 COM 的信息

如果您使用过 VBA、.NET、VBscript 或任何其他语言来处理 Excel,那么其中许多 Excel 方法看起来都是一样的。那是因为它们都使用 Microsoft 提供的同一个库。该库使用 COM,这是 Microsoft 向与语言无关的程序员提供 API 的方式。 COM 本身是一项较旧的技术,调试起来可能很棘手。如果您想了解有关 Python 和 COM 的更多信息,我强烈推荐 Python Programming on Win32马克·哈蒙德。当您在 Windows 上的官方 .msi 安装程序中安装 Python 后,他就是那个人。

WIN32COM 的替代品

我还需要指出,有几个很棒的开源替代方案,它们在大多数情况下都比 COM 更快,并且可以在任何操作系统(Mac、Linux、Windows 等)上运行。这些工具都解析包含 .xlsx 的压缩文件。如果您不知道 .xlsx 文件是 .zip,只需将扩展名更改为 .zip,然后您就可以浏览内容(在您的职业生涯中至少要做一次这种有趣的事情)。其中我推荐Openpyxl我用它在性能至关重要的服务器上解析和创建 Excel 文件。 切勿将 win32com 用于服务器事件,因为它会为每个可能存在漏洞的实例打开进程外的 excel.exe 实例

建议

我会向与个人数据集密切合作的用户(分析师、金融服务、研究人员、会计师、业务运营等)推荐 win32com,这些用户正在执行数据发现事件,因为它与打开的工作簿配合得很好。但是,需要以较小的占用空间或执行非常大的任务的开发人员或用户或并行处理必须使用这样的程序包作为 openpyxl。