OpenPyXL:将单元格中的字符串与字符串集进行比较以打印行中的所有单元格值
OpenPyXL: Compare a string in a cell to a string set to print all cell values in row
我一直在使用 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)
我不知道该怎么做才能解决这个问题。非常感谢任何想法和建议。
知道了,代码有效。虽然很慢,有什么办法让它更快吗?
>>> 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
我一直在使用 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)
我不知道该怎么做才能解决这个问题。非常感谢任何想法和建议。
知道了,代码有效。虽然很慢,有什么办法让它更快吗?
>>> 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