使用python操作Excel2007文件

使用python操作Excel2007文件,python,excel,Python,Excel,使用python,我需要能够对excel 2007工作簿执行以下操作: 删除行 对工作表排序 从列中获取不同的值 我正在调查;然而,它的能力似乎有限 有谁能推荐一个可以完成上述任务的库吗?我想在开始之前告诉您这只是一个基于windows的解决方案。但是,如果您使用的是Windows,我建议您使用Win32Com,可以找到该模块。该模块允许Python对任何Microsoft Office应用程序(包括Excel)进行编程访问,并使用VBA中使用的许多相同方法。通常,您要做的是记录一个宏(或从内存

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

  • 删除行
  • 对工作表排序
  • 从列中获取不同的值
  • 我正在调查;然而,它的能力似乎有限


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

    我想在开始之前告诉您这只是一个基于windows的解决方案。但是,如果您使用的是Windows,我建议您使用Win32Com,可以找到该模块。该模块允许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"
    
        A
    1   "a"
    2   "b"
    3   "c"
    4   "c"
    
    接下来让我们按升序对单元格进行排序(尽管我建议将值提取到python中,并在列表中进行排序,然后将值发送回python)

    这就产生了:

        A
    1   "c"
    2   "b"
    3   "a"
    4   "c"
    
        A
    1   "a"
    2   "b"
    3   "c"
    4   "c"
    
    现在我们将从列中获得不同的值。这里要做的主要事情是如何从单元格中提取值。您可以使用sheet.Range(“A1”、“A4”)一次选择许多单元格,也可以使用sheet.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,这是微软为语言不可知的程序员提供API的方式。COM本身是一种较老的技术,调试起来很棘手。如果您想了解更多关于Python和COM的信息,我强烈推荐MarkHammond。他就是那个在官方的.msi安装程序中在Windows上安装Python后大喊大叫的家伙

    WIN32COM的替代方案

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

    建议


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

    我想先告诉您这是一个基于windows的解决方案。但是,如果您使用的是Windows,我建议您使用Win32Com,可以找到该模块。该模块允许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"
    
        A
    1   "a"
    2   "b"
    3   "c"
    4   "c"
    
    接下来让我们按升序对单元格进行排序(尽管我建议将值提取到python中,并在列表中进行排序,然后将值发送回python)

    这就产生了:

        A
    1   "c"
    2   "b"
    3   "a"
    4   "c"
    
        A
    1   "a"
    2   "b"
    3   "c"
    4   "c"
    
    现在我们将从列中获得不同的值。这里要做的主要事情是如何从单元格中提取值。您可以使用sheet.Range(“A1”、“A4”)一次选择许多单元格,也可以使用sheet.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方法中的许多看起来都是一样的。这是因为它们都使用相同的库