如何根据单元格值是否包含某个字符来迭代Excel工作表

时间:2019-11-01 21:44:09

标签: python openpyxl

我正在尝试编写一个脚本,该脚本将根据第一列中相应行的单元格值是否包含特定字符(在这种情况下为“#”)来删除行。

我尝试编写以下函数,希望该函数可以迭代工作表并返回包含已删除行的新工作表。 LabSample是我正在使用的工作表。

def remove_headers():
    for rowNum in range(2, LabSample.max_row):
        sys_sample_code = LabSample.cell(row=rowNum, column=1).value
        if '#' not in sys_sample_code:
            continue
        else:
            LabSample.delete_rows(rowNum, 1)
    return LabSample

for row in LabSample.rows:
    print(row[0].value)

我目前没有收到任何错误消息,但是我得到的输出与输入相同。似乎没有任何行被删除。

2 个答案:

答案 0 :(得分:0)

尝试将sys_sample_code强制转换为str()

#...
sys_sample_code = LabSample.cell(row=rowNum, column=1).value
        if '#' not in str(sys_sample_code): # SEE EDIT HERE
        # ...

答案 1 :(得分:0)

我可能会通过在numpy中导入表,然后索引包含'#'的行来完成此操作,最后使用np.delete删除行,然后再将其推回原位。

这是一个简短的示例,有点说明了我在说什么。只需将起始数组'x'替换为数据数组,然后沿着您感兴趣的列进行分析即可。

import numpy as np

x = np.array(
        [1,2,5,'a','#test1', 'b', 7, '#test2', 9]
         )

index = {count: pos for count, pos in enumerate(x) if '#' in pos[:]}

x = np.delete(x, list(index.keys()))


In [17]: x
Out[17]: array(['1', '2', '5', 'a', 'b', '7', '9'], dtype='<U11')