使用python查找Excel的列中是否存在值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用python查找Excel的列中是否存在值相关的知识,希望对你有一定的参考价值。

我有一个带有一个工作表的Excel文件,其中包含沉积物收集数据。我正在运行很长的Python脚本。

在工作表中,标题为“ CollectionYear”的列。假设我要2010年。如果“ CollectionYear”列中存在2010年,我希望脚本的其余部分运行,如果没有,那么我希望脚本运行停止。

这似乎是一件容易的事,但对于我的一生,我无法弄清楚,也找不到任何示例。

任何帮助将不胜感激。

答案

我一直使用xlrd,它对我来说非常有用。这样的事情可能会有所帮助

from xlrd import open_workbook

def main():
    book = open_workbook('example.xlsx')
    sheet = book.sheet_by_index(0)
    collection_year_col = 2 #Just an example
    test_year = 2010
    for row in range(sheet.nrows):
        if sheet.cell(row,collection_year_col).value == test_year:
            runCode()

def runCode():
    #your code

我希望这会为您指明正确的方向。如果您的问题的详细信息已知,可以提供更多帮助。

另一答案

[尝试使用xlwings库从python与Excel进行接口

他们的文档示例:

xlwings
另一答案

[这是我从处理一大堆from xlwings import Workbook, Sheet, Range, Chart wb = Workbook() # Creates a connection with a new workbook Range('A1').value = 'Foo 1' Range('A1').value >>> 'Foo 1' Range('A1').value = [['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]] 文件的大海捞针问题中学到的。有.xls和朋友(xlrd)无法做的事情,例如获取单元格的公式。为此,您需要使用Microsoftor won't1

我建议您找到Mark Hammond的Win32上的Python编程的副本。 20年后仍然有用。 Win32上的Python编程介绍了COM的基础知识,以及如何使用Component Object Model (COM)库(也来自Mark Hammond)访问COM。

概括地说,您可以将COM视为服务器(例如Excel)和客户端(例如Python脚本)之间的API。2

pywin32

COM API为pywin32。一旦习惯了术语,事情就变得简单而乏味。例如,Excel文件从技术上讲是“工作簿”。 “工作簿” COM对象的import win32com.client # Connect to Excel server xl = win32com.client.Dispatch("Excel.Application") 为Python提供了与“工作簿”交互的句柄。 (您是否注意到这些结尾的不同<结尾?)

reasonably well documented
“工作簿”包含一个“工作表”,可通过“工作表” COM对象在此处访问:

the Open method

最后,工作表的'import win32com.client

# Connect to Excel server
xl = win32com.client.Dispatch("Excel.Application")

myfile = r'C:\temp\myworkbook.xls'
wb = xl.Workbooks.Open(Filename=myfile)

'属性“返回代表工作表上所有单元格的Range对象”。然后,Range对象具有import win32com.client

# Connect to Excel server
xl = win32com.client.Dispatch("Excel.Application")

myfile = r'C:\temp\myworkbook.xls'
wb = xl.Workbooks.Open(Filename=myfile)
sht1 = wb.Sheets.Item(1)
方法,它将在范围内搜索。 

LookIn

参数允许搜索单元格值,公式和注释。Cells

Find

的结果是一个Range对象,它具有许多有用的Find,如FormulaGetAddressValueText。您还会发现,与任何其他Microsoft一样,它足以应付政府工作。 最后,不要忘记关闭工作簿并退出Excel!

import win32com.client # Connect to Excel server xl = win32com.client.Dispatch("Excel.Application") myfile = r'C:\temp\myworkbook.xls' wb = xl.Workbooks.Open(Filename=myfile) sht1 = wb.Sheets.Item(1) match = sht1.Cells.Find('search string')

您可以使用propertiesimport win32com.client

# Connect to Excel server
xl = win32com.client.Dispatch("Excel.Application")

myfile = r'C:\temp\myworkbook.xls'
wb = xl.Workbooks.Open(Filename=myfile)
sht1 = wb.Sheets.Item(1)
match = sht1.Cells.Find('search string')

print(match.Formula)

wb.Close(SaveChanges=False)
xl.Quit()
扩展这些想法,并迭代工作簿中的所有工作表(或目录中的所有工作簿)。您可以玩得开心!

您可能会遇到的头痛包括VBA宏和嵌入式对象,以及每种可能产生的各种不同警报。性能也是一个问题。以下沉默通知可以显着提高性能:

应用程序>>

  • [Sheets.Item(msoAutomationSecurityForceDisable)
  • Sheets.Count(False)
  • Sheets.Count(False)
  • xl.DisplayAlerts(False)
  • xl.AutomationSecurity(False)
  • 工作簿

  • xl.PrintCommunication(False)
  • xl.ScreenUpdating(False)
  • 另一个潜在的问题是xl.StatusBar。基本上,Python是否具有有关COM对象的信息?这会影响自省以及如何引用COM对象。默认情况下,wb.DoNotPromptForConvert程序包使用后期绑定自动化。

    使用后期绑定自动化,Python对COM对象了解不多:

    wb.EnableAutoRecover

    通过早期绑定的自动化,Python对对象有了全面的了解:

    wb.KeepChangeHistory

    要启用早期绑定,必须运行late/early binding附带的win32com.client。运行>> import win32com.client
    >> xl = win32com.client.Dispatch("Excel.Application")
    >> xl
    <COMObject Excel.Application>
    >> len(dir(xl))
    55
    将提示库绑定。 

    >> import win32com.client >> xl = win32com.client.Dispatch("Excel.Application") >> xl <win32com.gen_py.Microsoft Excel 16.0 Object Library._Application instance at 0x2583562290680> >> len(dir(xl)) 125

    makepy.py

    该过程创建一个Python文件(在pywin32中),该文件映射COM对象的方法和属性。

    makepy.py

    [早期绑定还提供对COM常量的访问,例如(venv) c:\temp\venv\Lib\site-packages\win32com\client>python makepy.py
    python makepy.py
    enter image description here,并且区分大小写(而后期绑定则不区分大小写。)

    这应该足够实现一个Python到Excel的库(如Temp\),尽管过高了。


    1

    实际上,(venv) c:\temp\venv\Lib\site-packages\win32com\client>python makepy.py python makepy.py Generating to C:\Users\Lorem\AppData\Local\Temp\gen_py\3.6\00020813-0000-0000-C000-000000000046x0x1x9.py Building definitions from type library... Generating... Importing module 通过以上是关于使用python查找Excel的列中是否存在值的主要内容,如果未能解决你的问题,请参考以下文章

    excel中判断一个表中的某一列的数据在另一个表中的某一列中是不是存在

    Excel VBA:从一列中的字符串中查找和删除多个值

    使用 XLRD 从 excel 表中的列中读取 int 值

    如何通过在表 A 的列中查找逗号分隔值来从表 B 返回值

    在 MySQL 表中搜索包含 CSV 数据的列中是不是存在输入值

    查找名称包含固定列中特定值的列