如何使用Python选取Excel特定条目、翻译颜色标识后保存至另一Excel文件
解决方案
原有代码的问题梳理
- 字符串类参数未加引号:工作表名
Sheet1、英文颜色关键词(如blue/red等)都是字符串类型,需要用引号包裹才能正确识别 - 单元格取值逻辑错误:判断内容是否包含关键词需要针对
cell.value操作,不能直接判断in cell - 变量未初始化:
i/j/result等变量未定义就执行自增操作,会触发名称报错 - 翻译错误:银色(silver)对应的德语翻译错误写为了Orange,实际应为Silber
- 方法弃用问题:
get_sheet_by_name是openpyxl的旧版废弃方法,推荐直接用工作簿对象[工作表名]调用
修正后的实现代码
我们用颜色映射字典替换大量冗余的elif判断,逻辑更简洁,后续维护也更方便:
import openpyxl from openpyxl import Workbook, load_workbook # 英德颜色映射字典,新增颜色直接加键值对即可 color_map = { 'blue': 'Blau', 'red': 'Rot', 'grey': 'Grau', 'black': 'Schwarz', 'white': 'Weiß', 'offwhite': 'Elfenbein', 'brown': 'Braun', 'beige': 'Beige', 'pink': 'Pink', 'yellow': 'Gelb', 'orange': 'Orange', 'green': 'Grün', 'turquoise': 'Türkis', 'purple': 'Violett', 'gold': 'Gold', 'silver': 'Silber' } # 读取源Excel book = load_workbook('datei.xlsx') sheet = book['Sheet1'] vK = sheet['G1':'G2259'] valuesK = [] # 遍历单元格匹配颜色 for row in vK: for cell in row: # 兼容空单元格,转字符串处理避免类型报错 cell_content = str(cell.value).strip() if cell.value else '' matched = False # 不区分大小写匹配颜色关键词 for en_color, de_color in color_map.items(): if en_color in cell_content.lower(): valuesK.append(f'{de_color} ({cell_content})') matched = True break if not matched: valuesK.append(f'Multicolour ({cell_content})') # 写入新Excel wb = Workbook() ws = wb.active # 用enumerate自动生成行号,不需要手动维护计数器 for row_idx, content in enumerate(valuesK, start=1): ws[f'A{row_idx}'] = content wb.save('datei2.xlsx')
优化点说明
- 不区分大小写匹配,不管单元格内容是
Blue、BLUE还是blue都能正常识别 - 兼容空单元格场景,不会因为空值触发类型报错
- 映射字典可扩展性强,新增颜色对应关系不需要修改判断逻辑,直接加键值对即可
内容的提问来源于stack exchange,提问作者SDR YA
相关产品推荐
相关产品推荐

