Python使用xlsxwriter操作Excel遇问题:仅写入一行、保存异常
解决Excel自动录入数据的问题
问题根源分析
语法错误导致数据存储异常
原代码中valores.append[lst]是语法错误,正确写法应为valores.append(lst)。同时,循环内复用同一个lst并执行lst.clear(),由于列表是引用类型,清空操作会导致valores中已添加的元素也被清空,最终只有空数据或无效内容。xlsxwriter不支持追加数据
xlsxwriter仅用于创建新Excel文件,每次运行都会覆盖同名文件,无法实现"持续录入"的需求。如果需要追加数据到已有文件,应使用openpyxl库。文件保存问题
原代码的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
相关产品推荐
相关产品推荐

