当前位置: 首页 > news >正文

字典列表导出为 Excel

字典列表是业务开发中最常见的数据结构,例如数据库查询结果、API 响应数据等,每条记录以键值对形式存在。

实现思路

  1. 从首条数据提取键名作为表头
  2. 遍历每条字典记录,按键的顺序写入对应列
  3. 支持空值容错处理
  4. 对数值、布尔等特殊字段做类型区分写入

完整代码

from spire.xls import * from spire.xls.common import * def dict_list_to_excel(dict_list, output_path, sheet_name="数据", custom_headers=None): """将字典列表导出为Excel表格""" if not dict_list: raise ValueError("数据列表不能为空") workbook = Workbook() workbook.Worksheets.Clear() sheet = workbook.Worksheets.Add(sheet_name) # 确定表头:优先使用自定义表头,否则使用字典键名 if custom_headers: headers = custom_headers keys = list(dict_list[0].keys()) else: keys = list(dict_list[0].keys()) headers = keys # 写入表头 for col_idx, header in enumerate(headers): cell = sheet.Range[1, col_idx + 1] cell.Value = header cell.Style.Font.IsBold = True cell.Style.HorizontalAlignment = HorizontalAlignType.Center # 写入数据 for row_idx, item in enumerate(dict_list): for col_idx, key in enumerate(keys): cell = sheet.Range[row_idx + 2, col_idx + 1] value = item.get(key, "") # 根据类型智能写入 if value is None: cell.Value = "" elif isinstance(value, bool): cell.BooleanValue = value elif isinstance(value, (int, float)): cell.NumberValue = float(value) else: cell.Value = str(value) # 格式优化 data_range = sheet.Range[1, 1, len(dict_list) + 1, len(headers)] data_range.BorderAround(LineStyleType.Thin) data_range.BorderInside(LineStyleType.Thin) sheet.AllocatedRange.AutoFitColumns() workbook.SaveToFile(output_path, ExcelVersion.Version2016) workbook.Dispose() # 调用示例 if name == "main": orders = [ {"order_id": "ORD2024001", "product": "笔记本支架", "quantity": 2, "price": 89.9, "status": "已发货"}, {"order_id": "ORD2024002", "product": "USB集线器", "quantity": 5, "price": 45.0, "status": "待出库"}, {"order_id": "ORD2024003", "product": "散热底座", "quantity": 1, "price": 129.0, "status": "已签收"}, ] dict_list_to_excel(orders, "orders.xlsx", sheet_name="订单数据")
http://www.jsqmd.com/news/1139124/

相关文章:

  • FreeLLMAPI安装(WSL版)
  • 【HackMyVM】latestWasALie
  • 如何一键获取国家中小学智慧教育平台电子课本?这个免费工具帮你解决备课难题
  • 为什么“双触发器”不够用?
  • 国际eSIM物联卡如何远程写号切换运营商?深度适配多国物流场景解析
  • 常德本地环保装修哪家技术强
  • 2026最新实操:小白也能用游戏护航小程序,快速搭建校园电竞服务SaaS系统
  • 终极GTA5安全防护菜单:YimMenu完全使用指南
  • 一站式可观测新选择:OpenObserve 深度对标 ELK / Grafana+Prometheus / Netdata,附Docker一键部署实战
  • Python 获取 A 股 K 线、实时行情和五档盘口:QuantDash API 示例
  • ubuntu使用很久之后网络突然连不上解决方法
  • WebAssembly AI 插件热加载:运行时替换模块而不丢会话状态
  • 有什么针对新闻媒体行业的安全解决方案
  • 蔡司三坐标能否检测齿轮?完整检测方案详解
  • Copilot上下文感知提醒:基于Graph API的工作流驱动机制
  • 使用vivado开发FPGA完整流程
  • Rust 智能指针选型:Box、Rc、Arc 什么时候该用哪一个
  • OpenClaw智能体工作流中枢:轻量级AI技能编排引擎实战指南
  • 潮汛网快讯:英国GEO公司geoSurge完成1200万美元种子轮融资
  • Lifecycle中出现的监听器
  • ClaudeAgent】并发-后台任务
  • 科辉荣盛小程序定制开发,多重保障安心数字化
  • 佳木斯装修交叉施工多?轻质抹灰石膏减少墙面破损返工
  • 双轴追踪电站 vs 固定式光伏——从三项强制国标看电站支架选型的技术参数逻辑
  • 每日安全情报报告 · 2026-07-06
  • Fable 5降本新招:pxpipe将上下文转图片,token输入成本最多省70%!
  • nVisual:系统自动推荐方案,业务交付周期缩短40%
  • 为什么 printf(“%d“, 5/2) 输出 2 不是 2.5?C语言整数除法陷阱
  • Gemma-2B/4B本地部署实战:从树莓派到Mac的全栈调优指南
  • 同质化质控工具无法支撑集团实验室管控,IACheck AI 报告文档审核统一全机构审核标尺