Openpyxl:回填具有部分字符串匹配的单元格的行?

Openpyxl: backfill a row that has a cell with a partial string match?

我正在开发一个程序,该程序可以过滤大型 .xlsx 文件,然后将这些过滤后的集合拆分到新工作簿中的新工作表上。

我试图解决的一个问题是使用 openpyxl 在新工作表上重新创建旧格式。我似乎无法弄清楚如何使部分字符串匹配不会导致 TypeError。

相关代码片段:

def set_style(sheet, type_row, group1, group2):
    for row in sheet.iter_rows():
        for cell in row:
            if row[type_row].value in group1:
                if 'START:' in cell.value:
                    cell.fill = PatternFill(start_color='00FFOO', end_color='00FF00', fill_type='solid')
                    cell.font = Font(bold=True)
                if 'END:' in cell.value:
                    cell.fill = PatternFill(start_color='99FF99', end_color='99FF99', fill_type='solid')
                    cell.font = Font(bold=True)
            if row[type_row].value in group2:
                cell.font = Font(bold=True)
                cell.fill = PatternFill(start_color='FFA500', end_color='FFA500', fill_type='solid')

与 group2 相关的 if 语句本身运行良好,只有当我尝试检查“START:”或“END:”时才会导致我的错误。

如有任何帮助,我们将不胜感激!

这就是我解决这个问题的方法,它与我的一个用例几乎匹配。 请看看是否有帮助:

# Method to get row indexes of searched values in a specific column with near match condition
# Arguments to this method are:- Row number for header row, Column name & Search value
def get_row_idx_lst_based_on_search_val_specific_col_near_match(self, _header_row_num, _col_name, _search_val):
    # Fetch the column index from column name using 'ref_col_name_letter_map' method
    _col_idx = column_index_from_string(self.ref_col_name_letter_map(_header_row_num)[_col_name])
    # Get the list of indexes where near match of searched value is found excluding the header row
    # The Excel columns start with 1, however when iterating, the tuples start with index 0
    _row_idx_list = [_xl_row_idx for _xl_row_idx, _row_val in
                     enumerate(self.my_base_active_ws.iter_rows(values_only=True), start=1) if
                     str(_search_val) in str(_row_val[_col_idx - 1]) if _xl_row_idx != _header_row_num]
    # Return type is list
    return _row_idx_list

我设法找出问题所在并解决了它:

if row[5].value is not None:
  if row[5].value != int:
     if 'START:' in row[5].value:
#<rest of code here>