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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:12:50