使用xlsxwriter写入Excel遇语法错误,求正确实现方案
解决Python写入Excel的语法错误问题
嘿,我一眼就看到你的代码里cookie_sales的定义出了大问题——这就是触发「invalid syntax」的根源!你把字典和列表的语法彻底混在一起了:外层用了字典的大括号{},但里面却塞了带键值对的列表[],而Python里列表是不能用key: value这种写法的,字典也需要严格遵循键: 值的结构。
第一步:修正数据结构
首先得把你的销售数据改成Python能识别的格式,这里给你两种常用的正确结构:
方案1:按列组织的字典(适合批量处理列数据)
把每个列名作为字典的键,对应的值是该列的所有数据列表:
cookie_sales = { 'Name': ['Sue', 'Feeny', 'Jimmy', 'Seymour', 'Shawn', 'Corey', 'Anne', 'Terry', 'Derek', 'Sammy', 'Topanga', 'Alan', 'Mark', 'Joe', 'Elliot'], 'Age': [23, 99, 23, 11, 31, 55, 35, 44, 71, 41, 39, 22, 16, 25, 32], 'Boxes Sold': [12, 8, 15, 5, 20, 10, 18, 14, 7, 16, 19, 9, 6, 11, 13] # 我补全了示例数据,你可以替换成真实值 }
方案2:按行组织的列表(适合单条记录管理)
列表里的每个元素是一个字典,代表一条完整的销售记录:
cookie_sales = [ {'Name': 'Sue', 'Age': 23, 'Boxes Sold': 12}, {'Name': 'Feeny', 'Age': 99, 'Boxes Sold': 8}, {'Name': 'Jimmy', 'Age': 23, 'Boxes Sold': 15}, {'Name': 'Seymour', 'Age': 11, 'Boxes Sold': 5}, {'Name': 'Shawn', 'Age': 31, 'Boxes Sold': 20}, {'Name': 'Corey', 'Age': 55, 'Boxes Sold': 10}, {'Name': 'Anne', 'Age': 35, 'Boxes Sold': 18}, {'Name': 'Terry', 'Age': 44, 'Boxes Sold': 14}, {'Name': 'Derek', 'Age': 71, 'Boxes Sold': 7}, {'Name': 'Sammy', 'Age': 41, 'Boxes Sold': 16}, {'Name': 'Topanga', 'Age': 39, 'Boxes Sold': 19}, {'Name': 'Alan', 'Age': 22, 'Boxes Sold': 9}, {'Name': 'Mark', 'Age': 16, 'Boxes Sold': 6}, {'Name': 'Joe', 'Age': 25, 'Boxes Sold': 11}, {'Name': 'Elliot', 'Age': 32, 'Boxes Sold': 13} ]
第二步:完整写入Excel的代码
根据你选的结构,用xlsxwriter完成写入:
对应方案1的完整代码
import xlsxwriter # 按列组织的数据 cookie_sales = { 'Name': ['Sue', 'Feeny', 'Jimmy', 'Seymour', 'Shawn', 'Corey', 'Anne', 'Terry', 'Derek', 'Sammy', 'Topanga', 'Alan', 'Mark', 'Joe', 'Elliot'], 'Age': [23, 99, 23, 11, 31, 55, 35, 44, 71, 41, 39, 22, 16, 25, 32], 'Boxes Sold': [12, 8, 15, 5, 20, 10, 18, 14, 7, 16, 19, 9, 6, 11, 13] } # 创建工作簿和工作表 workbook = xlsxwriter.Workbook('hello2.xlsx') worksheet = workbook.add_worksheet() # 写入表头(字典的键) current_row = 0 for col, header in enumerate(cookie_sales.keys()): worksheet.write(current_row, col, header) # 写入每列的数据 current_row += 1 for col, data_list in enumerate(cookie_sales.values()): for row_idx, value in enumerate(data_list, start=current_row): worksheet.write(row_idx, col, value) # 必须关闭工作簿,否则文件会损坏 workbook.close()
对应方案2的完整代码
import xlsxwriter # 按行组织的数据 cookie_sales = [ {'Name': 'Sue', 'Age': 23, 'Boxes Sold': 12}, {'Name': 'Feeny', 'Age': 99, 'Boxes Sold': 8}, {'Name': 'Jimmy', 'Age': 23, 'Boxes Sold': 15}, {'Name': 'Seymour', 'Age': 11, 'Boxes Sold': 5}, {'Name': 'Shawn', 'Age': 31, 'Boxes Sold': 20}, {'Name': 'Corey', 'Age': 55, 'Boxes Sold': 10}, {'Name': 'Anne', 'Age': 35, 'Boxes Sold': 18}, {'Name': 'Terry', 'Age': 44, 'Boxes Sold': 14}, {'Name': 'Derek', 'Age': 71, 'Boxes Sold': 7}, {'Name': 'Sammy', 'Age': 41, 'Boxes Sold': 16}, {'Name': 'Topanga', 'Age': 39, 'Boxes Sold': 19}, {'Name': 'Alan', 'Age': 22, 'Boxes Sold': 9}, {'Name': 'Mark', 'Age': 16, 'Boxes Sold': 6}, {'Name': 'Joe', 'Age': 25, 'Boxes Sold': 11}, {'Name': 'Elliot', 'Age': 32, 'Boxes Sold': 13} ] workbook = xlsxwriter.Workbook('hello2.xlsx') worksheet = workbook.add_worksheet() # 写入表头(取第一条记录的键) headers = cookie_sales[0].keys() for col, header in enumerate(headers): worksheet.write(0, col, header) # 写入每行数据 for row, record in enumerate(cookie_sales, start=1): for col, value in enumerate(record.values()): worksheet.write(row, col, value) workbook.close()
关键注意点
- 一定要记得调用
workbook.close(),否则Excel文件会无法正常打开甚至损坏。 - 如果你的
Boxes Sold有真实数据,直接替换我示例里的数值就行。
内容的提问来源于stack exchange,提问作者Joey Jayman
相关产品推荐
相关产品推荐

