我一直在使用Python和OpenPyXL来访问3000多行的Excel文件。我一直在尝试打印包含我想要搜索的字符串单元格值的整行(或行中的某些单元格值),但似乎我遇到了错误:
TypeError: argument of type 'NoneType' is not iterable
这是我正在使用的代码(现在,我只是想输出包含我想要搜索的字符串的单元格的cell.value但是我想在行或整个输出某个单元格行本身)
>>> from openpyxl import *
>>> wb = load_workbook('C:\Users\Aldwin\Desktop\Excel1.xlsx',read_only=True)
for row in ws.iter_rows(min_row=1, min_col=1):
for cell in row:
if 'DRLDMEM' in cell.value: #String I want to search: 'DRLDMEM'
print(cell.value, end=" ")
print()
Traceback (most recent call last):
File "<pyshell#19>", line 3, in <module>
if 'DRLDMEM' in cell.value:
TypeError: argument of type 'NoneType' is not iterable
当我对单个细胞进行检查时,它可以正常工作。比如,单元格AA13包含字符串的一部分:
>>> print(ws['AA13'].value)
DRLDMEM, READ, PCINC
>>> 'DRLDMEM' in ws['AA13'].value
True
我想输出这样的打印:
T1 FETCH2: DR←M, PC←PC+1 DRLDMEM, READ, PCINC
T3 SUBIMM1: DR←M DRLDMEM, READ
T3 ANDIMM1: DR←M DRLDMEM, READ
在3000多行中,所需的输出只是具有DRLDMEM的单元格的行(或者最好是具有值的单元格:FETCH2,SUBIMM1,ANDIMM1)
我不知道如何解决这个问题。任何想法和建议都非常感谢。
答案 0 :(得分:0)
知道了,代码有效。但是,任何想法如何让它更快?
>>> from openpyxl import *
>>> wb = load_workbook('C:/Users/MyPlace/Desktop/MyWork.xlsx',read_only=True)
>>> ws = wb["Sheet1"]
>>> for row in ws.iter_rows(min_row=1, min_col=1):
for cell in row:
if cell.value is not None:
if type(cell.value) != int:
if 'PCINC' in cell.value:
#print(cell.coordinate +' ' + cell.value, )
a = cell.row
for i in range(1,30):
if ws.cell(row=a,column=i).value is not None:
print(ws.cell(row=a,column=i).value,end=' ')
print()
OUTPUT:
T6 JMP4: PC[15-8]←TEMPH, PC[7-0]←TEMPL PCLD, THABUSLD, TLABUSLD, SCCLR
T6 JMPZ4: PC [15-8]←TEMP H PCLD, THABUSLD, TLABUSLD, SCCLR
T6 JMPNZ6: PC [15-8] ←TEMP H PCLD, THABUSLD, TLABUSLD, SCCLR
T6 JMPO4: PC [15-8]←TEMP H PCLD, THABUSLD, TLABUSLD, SCCLR
T6 JMPNO6: PC [15-8]←TEMP H PCLD, THABUSLD, TLABUSLD, SCCLR
T6 JMPC4: PC [15-8]←TEMP H PCLD, THABUSLD, TLABUSLD, SCCLR
T6 JMPNC6: PC[15-8]←TEMP H PCLD, THABUSLD, TLABUSLD, SCCLR
T6 JMPS4: PC[15-8]←TEMP H PCLD, THABUSLD, TLABUSLD, SCCLR
T6 JMPNS6: PC[15-8]←TEMP H PCLD, THABUSLD, TLABUSLD, SCCLR
T8 CALL6: AR←SP, DR←PC [7-0] ARLD, SPABUSLD, DRLD, PCLDBUSLD
T9 CALL7: M←DR, DRTOMEM, PCLD, THABUSLD, TLABUSLD, WRITE
T8 RET6: PC [15-8] ←TEMP H PCLD, THABUSLD, TLABUSLD, SCCLR
T7 LDINDAC5: DR←M, PC←AR DRLDMEM, READ, PCLD, ARABUSLD