Python读取Excel写入新表时字符拆分至单个单元格问题求助
问题原因及修复方案
核心问题
你遇到的单个字符分散到不同单元格的问题,根源在这行代码:
list(f'{a1}, {b1}, {c1}')
把拼接后的字符串转成列表时,会把每个字符(包括逗号、空格)拆成单独元素,比如"张三, 001, 100"会变成['张','三',',',' ','0','0','1',',',' ','1','0','0'],ws.append(row)自然会把每个字符塞进一个单元格。
另外代码还有两个隐藏问题:
- 遍历每个工作表都调用
xlsx2(),每次都会新建Workbook并覆盖之前的文件,最后只会保留最后一个工作表的数据。 xlsx2()直接用a1、b1、c1但这些是lists()的局部变量,正常运行会报错,你可能是靠全局变量凑活,但这不是规范写法。
修复后的完整代码
from openpyxl import Workbook, load_workbook import tkinter as tk from tkinter import filedialog def xlsx2(all_data): wb = Workbook() ws = wb.active # 写入表头 ws['A1'] = 'Монтажник(и)' ws['B1'] = 'Номер шкафа' ws['C1'] = 'Сумма' # 批量写入所有数据 for row in all_data: ws.append(row) wb.save('example.xlsx') def lists(): filetypes = ( ('Excel', '*.xlsx'), ('All files', '*.*'), ) filename6 = filedialog.askopenfilename( title='Выбери таблицу', filetypes=filetypes, ) wb = load_workbook(filename6, read_only=True, data_only=True) all_data = [] # 遍历所有工作表,收集数据 for sheet in wb: a1 = sheet['A14'].value b1 = sheet['B1'].value c1 = sheet['D14'].value # 直接把三个值作为列表元素,不要拼接字符串 all_data.append([a1, b1, c1]) # 所有数据收集完后,一次性写入文件 xlsx2(all_data) # 调用函数执行 if __name__ == "__main__": root = tk.Tk() root.withdraw() # 隐藏tk主窗口 lists()
关键修改点
- 给
xlsx2()加了all_data参数,用来接收所有工作表的数据列表,避免重复创建文件。 - 收集数据时直接用
[a1, b1, c1],每个值对应一列,不会拆分字符。 - 移除全局变量,用函数参数传递数据,代码更规范。
- 加上了tk窗口隐藏的代码,避免运行时弹出空白窗口。
内容的提问来源于stack exchange,提问作者Joseph King
相关产品推荐
相关产品推荐

