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
相关产品推荐
相关产品推荐

