使用python操作excel 2007文件

l--*_*''' 1 python excel

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

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

我正在研究openpyxl ; 但是,它的能力似乎有限.

任何人都可以推荐一个可以执行上述任务的库吗?

Mic*_*son 6

我想在此前言,让您知道这只是一个基于Windows的解决方案.但是,如果您使用的是Windows,我建议使用Win32Com,可在此处找到.此模块提供对任何Microsoft Office应用程序(包括Excel)的Python编程访问,并使用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)
Run Code Online (Sandbox Code Playgroud)

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

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

     A    
1   "d"
2   "c"
3   "b"
4   "a"
5   "c"
Run Code Online (Sandbox Code Playgroud)

删除行:让我们假设您要删除活动工作表中的第一行.

sheet.Rows(1).Delete()
Run Code Online (Sandbox Code Playgroud)

这会创建:

    A
1   "c"
2   "b"
3   "a"
4   "c"
Run Code Online (Sandbox Code Playgroud)

Next让我们按升序对单元格进行排序(虽然我建议将值提取到python并在列表中进行排序并将值发回)

rang = sheet.Range("A1","A4")
sheet.Sort.SetRange(rang)
sheet.Sort.Apply()
Run Code Online (Sandbox Code Playgroud)

这会创建:

    A
1   "a"
2   "b"
3   "c"
4   "c"
Run Code Online (Sandbox Code Playgroud)

现在我们将从列中获得不同的值.这里要带走的主要内容是如何从单元格中提取值.您可以使用sheet.Range("A1","A4")一次选择大量单元格,也可以通过使用sheet.Cells(row,col)逐个单元格迭代来访问这些值.范围快几个数量级,但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"]
Run Code Online (Sandbox Code Playgroud)

最后,您想要保存工作簿,您可以使用以下方法执行此操作:

wbk.SaveAs("C:/savedWorkbook.xlsx")
Run Code Online (Sandbox Code Playgroud)

你完成了!

INFO关于COM

如果您使用过VBA,.NET,VBscript或任何其他语言来使用Excel,那么许多Excel方法看起来都是一样的.这是因为他们都使用Microsoft提供的相同库.这个库使用COM,这是Microsoft向语言无关的程序员提供API的方式.COM本身是一种较旧的技术,调试起来很棘手.如果您想了解有关Python和COM的更多信息,我强烈推荐Mark Hammond 在Win32上进行Python编程.在官方.msi安装程序中在Windows上安装Python之后,他就是那个大喊大叫的人.

替代WIN32COM

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

建议

对于正在执行数据发现活动的个人数据集(分析师,金融服务,研究人员,会计师,业务运营等)密切合作的用户,我建议使用win32com,因为它可以很好地使用开放式工作簿.但是,需要以小占用空间极大的操作并行处理来执行非常大的任务的开发人员或用户必须使用诸如openpyxl之类的包.