OpenPyXL:将单元格中的字符串与字符串集进行比较,以打印行中的所有单元格值

时间:2018-04-21 09:00:56

标签: python excel openpyxl

我一直在使用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)

我不知道如何解决这个问题。任何想法和建议都非常感谢。

1 个答案:

答案 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