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

Python使用xlsxwriter写入Excel报'str'无write属性问题求解

解决方案

1 修复当前报错

报错的根因有两个:

  • 没有正确生成工作表对象:你代码中worksheet = ("Portal Data")只是给变量赋值了字符串,没有调用xlsxwriter的工作表创建方法,自然没有write方法可以调用
  • write方法传参错误:worksheet.write('A2', self.txt_fname.get(), self.txt_lname.get())多传了一个参数,xlsxwriter的write方法只接受「单元格坐标+写入值+可选格式」三个参数,你需要把self.txt_lname.get()单独写入对应的单元格

修复后的基础写入代码如下:

import xlsxwriter

workbook = xlsxwriter.Workbook('C:\\Users\\W\\Project\\Interface\\Portal Information Store.xlsx')
# 正确创建工作表对象
worksheet = workbook.add_worksheet("Portal Data")

# 写入表头(你之前已经配置过的列名)
worksheet.write('A1', '名')
worksheet.write('B1', '姓')
worksheet.write('C1', '联系方式')
worksheet.write('D1', '邮箱')
worksheet.write('E1', '密码')
worksheet.write('F1', '确认密码')
worksheet.write('G1', '出生日期')
worksheet.write('H1', '地址')

# 写入数据,修正传参错误
worksheet.write('A2', self.txt_fname.get())
worksheet.write('B2', self.txt_lname.get())
worksheet.write('C2', self.txt_contact.get())
worksheet.write('D2', self.txt_email.get())
worksheet.write('E2', self.txt_pass.get())
worksheet.write('F2', self.txt_confpass.get())
worksheet.write('G2', self.txt_dob.get())
worksheet.write('H2', self.txt_newloc.get())

workbook.close()

2 实现追加写入到空白行的需求

注意:xlsxwriter仅支持创建全新的Excel文件,无法读取已存在的文件内容,要实现每次写入都追加到已有数据的下方,需要改用支持读写已有文件的openpyxl库,实现步骤如下:

第一步 安装依赖

pip install openpyxl

第二步 完整实现代码

from openpyxl import load_workbook
import os

file_path = 'C:\\Users\\W\\Project\\Interface\\Portal Information Store.xlsx'

# 判断文件是否存在,不存在则先创建表头
if not os.path.exists(file_path):
    from openpyxl import Workbook
    wb = Workbook()
    ws = wb.active
    ws.title = "Portal Data"
    # 写入表头
    header = ['名', '姓', '联系方式', '邮箱', '密码', '确认密码', '出生日期', '地址']
    ws.append(header)
    wb.save(file_path)

# 加载已有文件
wb = load_workbook(file_path)
ws = wb["Portal Data"]

# 获取当前已有数据的最大行,+1就是下一个空白行的位置
next_row = ws.max_row + 1

# 写入数据到对应列
ws.cell(row=next_row, column=1, value=self.txt_fname.get())
ws.cell(row=next_row, column=2, value=self.txt_lname.get())
ws.cell(row=next_row, column=3, value=self.txt_contact.get())
ws.cell(row=next_row, column=4, value=self.txt_email.get())
ws.cell(row=next_row, column=5, value=self.txt_pass.get())
ws.cell(row=next_row, column=6, value=self.txt_confpass.get())
ws.cell(row=next_row, column=7, value=self.txt_dob.get())
ws.cell(row=next_row, column=8, value=self.txt_newloc.get())

# 保存文件
wb.save(file_path)
wb.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:45:02