如何解决Python用xlsxwriter写Excel时重复列名的问题?
解决xlsxwriter写入Excel时数据行重复列名的问题
你的问题出在遍历字典的方式不对——当前代码里遍历det(每个字典元素)时,enumerate(det)拿到的是字典的键(也就是'id'、'name'这些列名),而不是对应的值,所以数据行才会重复写入列名。
修正方法很简单:不要直接遍历字典,而是按照csv_columns定义的表头顺序,依次取出每个字典中对应键的值,这样既能保证列顺序和表头一致,又能写入正确的数据。
修正后的完整代码:
import xlsxwriter csv_columns = ( 'id', 'name', 'place', 'salary', 'email', ) details = [{'id':1, 'name': 'A', 'place':'B', 'salary': 2, 'email': 'c@d.com'}, {'id':3, 'name':'C', 'place':'D', 'salary': 4, 'email':'e@f.com'}] # 替换为你的实际文件路径,比如'output.xlsx' workbook = xlsxwriter.Workbook('output.xlsx') worksheet = workbook.add_worksheet() # 写入表头 for col, name in enumerate(csv_columns): worksheet.write(0, col, name) # 写入数据行 for row, det in enumerate(details, 1): for col, key in enumerate(csv_columns): # 按表头的键取出对应的值 worksheet.write(row, col, det[key]) workbook.close()
关键改动说明:
- 内层循环改为遍历
csv_columns,确保每一列的顺序和表头严格对应 - 用
det[key]获取字典中对应键的实际值,替换原来的字典键名输出
运行这段代码后,就能得到你期望的输出:
id name place salary email 1 A B 2 c@d.com 3 C D 4 e@f.com
内容的提问来源于stack exchange,提问作者Mia
相关产品推荐
相关产品推荐

