You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:48:01