使用Openpyxl与Python处理Excel:删除空格并替换为逗号
问题
我是Python新手,需要重构一份大型电子表格,需求如下:
- 删除L、M列每个单元格内的所有空格
- 随后用逗号分隔值,但需将“TL:Accepted”这类带冒号的内容保留为单个值
我有Pandas使用经验,可以结合Openpyxl实现,目前的代码如下:
# imports import openpyxl as py from openpyxl import Workbook, load_workbook # create a workbook and active worksheet wb = load_workbook(r'MERGEDSHEETS.xlsx') print(wb.sheetnames) ws = wb.active for sheet[L2:, M2:]: py.strip() wb.save(r'MERGEDSHEETSv2.xlsx')
解决方案
你的现有代码存在语法错误:for sheet[L2:, M2:] 不是合法的遍历方式,py.strip() 也无法直接操作单元格值。以下是两种可行的实现方案:
方法一:使用Openpyxl逐单元格处理
适合需要保留Excel原格式的场景:
import openpyxl import re # 加载目标工作簿和激活工作表 wb = openpyxl.load_workbook(r'MERGEDSHEETS.xlsx') ws = wb.active # 目标列:L对应第12列,M对应第13列 target_cols = [12, 13] # 正则规则:匹配带冒号的完整项(如TL:Accepted)或非逗号分隔的普通项 item_pattern = re.compile(r'(\w+:\w+|[^,]+)') for col in target_cols: # 从第2行开始遍历所有非空单元格 for row in range(2, ws.max_row + 1): cell = ws.cell(row=row, column=col) if not cell.value: continue # 步骤1:移除单元格内所有空格 no_spaces = str(cell.value).replace(' ', '') # 步骤2:提取所有有效项并去重 valid_items = item_pattern.findall(no_spaces) unique_items = list(dict.fromkeys(valid_items)) # 保持顺序去重 # 步骤3:用逗号重新连接 cell.value = ', '.join(unique_items) # 保存处理后的文件 wb.save(r'MERGEDSHEETSv2.xlsx')
方法二:使用Pandas批量处理(更适合大型表格)
Pandas处理海量数据效率更高,若无需严格保留原Excel格式,优先选择:
import pandas as pd import re # 读取Excel文件 df = pd.read_excel(r'MERGEDSHEETS.xlsx') def process_column_value(value): if pd.isna(value): return value # 移除所有空格 cleaned = str(value).replace(' ', '') # 提取带冒号的项或普通项 item_pattern = re.compile(r'(\w+:\w+|[^,]+)') valid_items = item_pattern.findall(cleaned) # 去重后用逗号连接 unique_items = list(dict.fromkeys(valid_items)) return ', '.join(unique_items) # 处理L列和M列(注意列名需与表格实际列名一致) df['L'] = df['L'].apply(process_column_value) df['M'] = df['M'].apply(process_column_value) # 保存结果,使用openpyxl引擎可保留部分格式 df.to_excel(r'MERGEDSHEETSv2.xlsx', index=False, engine='openpyxl')
内容的提问来源于stack exchange,提问作者tozzy
相关产品推荐
相关产品推荐

