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

Python使用xlsxwriter操作Excel遇问题:仅写入一行、保存异常

解决Excel自动录入数据的问题

问题根源分析

  1. 语法错误导致数据存储异常
    原代码中valores.append[lst]是语法错误,正确写法应为valores.append(lst)。同时,循环内复用同一个lst并执行lst.clear(),由于列表是引用类型,清空操作会导致valores中已添加的元素也被清空,最终只有空数据或无效内容。

  2. xlsxwriter不支持追加数据
    xlsxwriter仅用于创建新Excel文件,每次运行都会覆盖同名文件,无法实现"持续录入"的需求。如果需要追加数据到已有文件,应使用openpyxl库。

  3. 文件保存问题
    原代码的workbook.close()本身没问题,但由于前面数据存储错误,导致写入内容异常,看起来像未保存。


修正方案1:正确写入多行数据(创建新文件)

此方案修复原代码的语法错误,能正确写入多行数据,但每次运行会覆盖原有文件:

import xlsxwriter

workbook = xlsxwriter.Workbook('se.xlsx')
worksheet = workbook.add_worksheet()
valores = []
entra = 0

while entra != 2:
    Val = input("请输入宽度、长度、厚度、材料价格、切割时间(秒),用空格分隔:")
    # 每次循环创建新列表,避免引用问题
    lst = Val.split()
    print(lst)
    
    L = int(lst[0])
    C = int(lst[1])
    E = int(lst[2])
    V = (L * C * E * 8) / 1000000
    P = int(lst[3])
    T = int(lst[4])
    Pt = (T * P) / 36
    
    lst.append(Pt)
    lst.append(V)
    # 修正append语法,使用括号
    valores.append(lst)
    
    entra = int(input("输入2结束,输入1继续添加:"))

# 批量写入所有数据
for row_num, row_data in enumerate(valores):
    for col_num, col_data in enumerate(row_data):
        worksheet.write(row_num, col_num, col_data)

workbook.close()

修正方案2:持续录入(追加到已有文件)

使用openpyxl实现追加功能,每次运行将新数据添加到文件末尾,不会覆盖原有内容:

import openpyxl
from openpyxl import Workbook

# 尝试打开已有文件,不存在则创建新文件
try:
    workbook = openpyxl.load_workbook('se.xlsx')
    worksheet = workbook.active
    # 获取已有数据的最后一行,新数据从下一行开始写入
    start_row = worksheet.max_row
except FileNotFoundError:
    workbook = Workbook()
    worksheet = workbook.active
    start_row = 0

entra = 0
while entra != 2:
    Val = input("请输入宽度、长度、厚度、材料价格、切割时间(秒),用空格分隔:")
    lst = Val.split()
    print(lst)
    
    L = int(lst[0])
    C = int(lst[1])
    E = int(lst[2])
    V = (L * C * E * 8) / 1000000
    P = int(lst[3])
    T = int(lst[4])
    Pt = (T * P) / 36
    
    lst.append(Pt)
    lst.append(V)
    
    # 写入当前新数据行
    for col_num, col_data in enumerate(lst):
        # openpyxl的行列索引从1开始
        worksheet.cell(row=start_row + 1, column=col_num + 1, value=col_data)
    start_row += 1
    
    entra = int(input("输入2结束,输入1继续添加:"))

# 保存文件
workbook.save('se.xlsx')

内容的提问来源于stack exchange,提问作者Erick Bacovis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:43:41