使用python我需要能够对excel 2007的工作簿执行以下操作:
我正在调查openpyxl;但是,它的能力似乎有限。
有人可以推荐一个可以执行上述任务的库吗?
答案 0 :(得分:6)
我想在此前言,让您知道这是仅基于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工作表。当然有多种方式可以访问工作表,这通常是我演示如何使用win32的win32com的方式,因为它非常直观。
现在假设我在第一张纸上有以下值,我将逐一回答如何回答你的问题:
A
1 "d"
2 "c"
3 "b"
4 "a"
5 "c"
删除行: 让我们假设您要删除活动工作表中的第一行。
sheet.Rows(1).Delete()
这会创建:
A
1 "c"
2 "b"
3 "a"
4 "c"
Next让我们按升序对单元格进行排序(尽管我建议将值提取到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逐行逐个迭代来访问这些值(行,列)。范围快了几个数量级,但Cell更容易调试。
#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")
你完成了!
INFO关于COM
如果您使用过VBA,.NET,VBscript或任何其他语言来使用Excel,那么许多Excel方法看起来都是一样的。这是因为他们都使用Microsoft提供的相同库。这个库使用COM,这是Microsoft向语言无关的程序员提供API的方式。 COM本身是一种较旧的技术,调试起来很棘手。如果您想了解有关Python和COM的更多信息,我强烈推荐Mark Hammond Python Programming on Win32。在官方.msi安装程序中在Windows上安装Python之后,他就会大肆宣传。
替代WIN32COM
我还需要指出,在大多数情况下,有几种非常棒的开源替代品可以比COM更快,并且适用于任何操作系统(Mac,Linux,Windows等)。这些工具都解析包含.xlsx的压缩文件。如果您不知道.xlsx文件是.zip,只需将扩展名更改为.zip,然后您就可以浏览内容(在您的职业生涯中至少要做一次有趣的事情)。其中我建议使用Openpyxl来解析和创建性能至关重要的服务器上的Excel文件。 永远不要将win32com用于服务器活动,因为它会为每个可能泄漏的实例打开excel.exe的进程外实例
<强>建议强>
对于正在执行数据发现活动的个人数据集(分析师,金融服务,研究人员,会计师,业务运营等)密切合作的用户,我建议使用win32com,因为它适用于开放式工作簿。但是,需要执行大型任务的开发人员或用户或非常大的操作或并行处理必须使用包等as openpyxl。