使用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提供了与“工作簿”交互的句柄。 (您是否注意到这些结尾的不同<结尾?)
“工作簿”包含一个“工作表”,可通过“工作表” COM对象在此处访问:
最后,工作表的'参数允许搜索单元格值,公式和注释。Cellsimport 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
的结果是一个Range对象,它具有许多有用的Find,如Formula,GetAddress,Value和Text。您还会发现,与任何其他Microsoft一样,它足以应付政府工作。 最后,不要忘记关闭工作簿并退出Excel!Find
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')
您可以使用properties和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') print(match.Formula) wb.Close(SaveChanges=False) xl.Quit()
扩展这些想法,并迭代工作簿中的所有工作表(或目录中的所有工作簿)。您可以玩得开心!您可能会遇到的头痛包括VBA宏和嵌入式对象,以及每种可能产生的各种不同警报。性能也是一个问题。以下沉默通知可以显着提高性能:
应用程序>>
Sheets.Item
(False)
Sheets.Item
(msoAutomationSecurityForceDisable)Sheets.Count
(False)Sheets.Count
(False)工作簿xl.Interactive(正确)
使用后期绑定自动化,Python对COM对象了解不多:
通过早期绑定的自动化,Python对对象有了全面的了解:
要启用早期绑定,必须运行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
和,并且区分大小写(而后期绑定则不区分大小写。)
这应该足够实现一个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中判断一个表中的某一列的数据在另一个表中的某一列中是不是存在