基于Python实现Excel按指定列逗号值复制行的问题求助
问题排查与修正方案
原代码中的核心错误
列索引定位错误
需求是检查B列的逗号分隔值,但代码中错误地使用了row[5](对应第6列),正确的B列索引应为row[1](xlrd中列索引从0开始计数,A列是0,B列是1)。目标列更新错误
代码将拆分后的值写入了A列(new_row.write(0, value.strip())),但需求是保留A列原内容,更新B列,应该写入索引为1的位置。新行号逻辑错误
使用row_index + value_index作为新工作表的行号会导致行覆盖,当处理多行拆分时,后续拆分的行号会和原行号重叠。需要用一个独立的计数器跟踪新工作表的当前行位置。表头未区分处理(可选优化)
原代码会检查表头行是否包含逗号,虽然你的示例表头无逗号,但加入表头判断能避免潜在问题。
修正后的代码
import xlrd import xlwt def duplicate_rows_with_comma(input_file, output_file): workbook = xlrd.open_workbook(input_file) new_workbook = xlwt.Workbook() for sheet in workbook.sheets(): new_sheet = new_workbook.add_sheet(sheet.name) current_new_row = 0 # 独立计数器跟踪新工作表的行位置 # 先写入表头 header_row = sheet.row(0) for col_idx, cell in enumerate(header_row): new_sheet.write(current_new_row, col_idx, cell.value) current_new_row += 1 # 处理数据行(从第1行开始,跳过表头) for row_index in range(1, sheet.nrows): row = sheet.row(row_index) col_b_value = str(row[1].value).strip() # 获取B列值 if ',' in col_b_value: # 拆分B列值并去除空格 values = [v.strip() for v in col_b_value.split(',')] for value in values: # 复制原行所有内容 for col_idx, cell in enumerate(row): new_sheet.write(current_new_row, col_idx, cell.value) # 更新B列值为拆分后的值 new_sheet.write(current_new_row, 1, value) current_new_row += 1 else: # 直接复制整行 for col_idx, cell in enumerate(row): new_sheet.write(current_new_row, col_idx, cell.value) current_new_row += 1 new_workbook.save(output_file) # 调用示例 input_file = r'D:\sharing\Hope\6_1_2023\out.xlsx' output_file = r'D:\sharing\Hope\6_1_2023\new_test.xls' duplicate_rows_with_comma(input_file, output_file)
修正后代码的说明
- 用
current_new_row独立跟踪新工作表的行号,彻底解决行覆盖问题。 - 单独处理表头,确保表头不被拆分或修改。
- 正确定位B列(索引1)进行检查和更新,严格保留A列原内容。
- 对拆分后的值做了
strip()处理,去除多余空格,保证数据整洁。
内容的提问来源于stack exchange,提问作者Rpandia31
相关产品推荐
相关产品推荐

