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

环境准备1. Python 环境

安装依赖库

  • sqlite3:Python 标准库,无需额外安装
  • Free Spire.XLS:免费的 Excel 处理库,支持创建、写入和格式化 Excel 文件

安装命令:

pip install Spire.Xls.Free

二、实现思路

整个导出流程可以拆解为以下 5 个步骤:

  1. 连接 SQLite 数据库
  2. 获取数据库中所有用户表的名称
  3. 创建空白 Excel 工作簿
  4. 遍历每一张表:
    • 读取表结构(列名)与数据
    • 新建工作表(以表名命名)
    • 写入表头与数据
    • 自动调整行高与列宽
  5. 保存 Excel 文件,关闭数据库连接

三、完整代码

from spire.xls import * from spire.xls.common import * import sqlite3 # ---------------------- 1. 连接数据库 ---------------------- # 请将路径替换为你的数据库文件路径 conn = sqlite3.connect("Sales Data.db") cursor = conn.cursor() # ---------------------- 2. 获取所有用户表名 ---------------------- cursor.execute("SELECT name FROM sqlite_master WHERE type='table';") table_names = [name[0] for name in cursor.fetchall()] # ---------------------- 3. 创建 Excel 工作簿 ---------------------- workbook = Workbook() workbook.Worksheets.Clear() # 清空默认生成的工作表 # ---------------------- 4. 逐表写入数据 ---------------------- for table_name in table_names: # 4.1 获取列名(表头) cursor.execute(f"PRAGMA table_info('{table_name}')") columns_info = cursor.fetchall() column_names = [info[1] for info in columns_info] # 4.2 获取表数据 cursor.execute(f"SELECT * FROM {table_name}") rows = cursor.fetchall() # 4.3 新建工作表(以表名命名) sheet = workbook.Worksheets.Add(table_name) # 4.4 写入表头 for i, col_name in enumerate(column_names): sheet.Range[1, i + 1].Value = col_name # 4.5 写入数据行 for row_idx, row_data in enumerate(rows): for col_idx, cell_value in enumerate(row_data): sheet.Range[row_idx + 2, col_idx + 1].Value = cell_value # 4.6 自动调整行高和列宽 sheet.AllocatedRange.AutoFitRows() sheet.AllocatedRange.AutoFitColumns() # ---------------------- 5. 保存并清理资源 ---------------------- workbook.SaveToFile("DataBaseToExcel.xlsx", FileFormat.Version2016) workbook.Dispose() conn.close() print("数据导出完成!")

本文示例使用 SQLite,若需要从 MySQL、PostgreSQL 等数据库导出,只需替换数据库连接部分,后续处理逻辑完全通用。

四、关键点说明

1. 获取表名

SQLite 的系统表sqlite_master存储了所有表的结构信息。通过type='table'过滤,可以只获取用户表,自动排除系统表。

2. 获取列名

PRAGMA table_info是 SQLite 提供的便捷命令,返回表的列信息。结果中第二个字段即为列名,适合直接作为 Excel 表头。

3. 行列索引注意事项

sheet.Range[行, 列]的索引从1开始,而非 0。因此:

  • 表头写入第 1 行
  • 数据从第 2 行开始写入,对应索引row_idx + 2

4. 自动格式化

AllocatedRange会自动识别已被数据填充的区域,无需手动计算边界。
AutoFitRows()AutoFitColumns()可根据内容自动调整行高与列宽,使生成的表格更加美观。

五、总结

http://www.gsyq.cn/news/1605268.html

相关文章:

  • 如何3分钟获取阿里云盘Refresh Token:扫码授权完整教程
  • 推荐看看=Obsidian
  • ROS2 Jazzy Python 动作通信(Action)完整实操教程(斐波那契案例,可中途取消+实时反馈)
  • 什么是AI Agent?
  • 终极Windows窗口大小调整指南:3分钟掌握WindowResizer强制调整技巧
  • 2026年批量采购无人机专用胶粘产品怎么选?行业选型指南
  • 【信号处理】为什么功率谱不是幅度谱的平方
  • 每天5分钟玩转 Kubernetes
  • 深入解析PCM178x系列DAC:Delta-Sigma架构原理与音频硬件设计实战
  • 牛客周赛 Round 150
  • Java计算机毕设之基于 SpringBoot+Vue 的社区老龄关爱服务管理系统 公益助老项目发布与预约服务平台设计实现(完整前后端代码+说明文档+LW,调试定制等)
  • 【精通】RustMark v2.4:CI/CD 与发布工程 — Cargo Workspace 与 DevOps 深度实战
  • Java毕设项目:便民助老资源统筹服务平台基于前后端分离实现 数字化爱老助老公益服务管理平台设计与开发 (源码+文档,讲解、调试运行,定制等)
  • ABB工业机器人编程基础(十一)流程控制:FOR、WHILE 与示教器交互指令
  • 总结 6.29
  • RAG检索准不准怎么量化:recall@k和MRR实操
  • 基于本地大语言模型的AI助手中间件:ai-berkshire部署与集成指南
  • Vue 组件通信的多种实现思路
  • 银行网点实时语音识别解决方案客服沟通合规质检 业务沟通全量留痕
  • GLM-5.2 编程实战全解:744B MoE、1M 无损上下文、Code Arena 全球第一,国产开源长程 Coding 模型怎么用
  • Ubuntu CentOS 安装配置SSH完整教程
  • ISP Pipeline中径向递减锐化方案实现(四)
  • 2026年Vue3项目架构从零到一:目录、分层、代码,每一行都给你说明白
  • 一、linux系统安装与环境准备
  • YgoMaster终极PvP对战指南:如何轻松实现局域网联机与好友对战
  • 【Excel】使用“数据透视表”统计所有项的工作量
  • 我觉得目前脚本速度已经足够快了-----再快就不像人了
  • 【限时解密】ChatGPT API费用优化白皮书(含23个真实客户账单审计案例+自动识别高成本prompt的CLI工具)——OpenAI Partner认证专家独家释放
  • 华为MetaERP 财务 ERP 解决方案架构师(EBS+SAP+MetaERP 复合背景)全国需求现状 + 城市潜力分级一、全国整体市场需求(2026 年现状)1. 需求整体判断:结构性紧缺,复
  • dotnet 10 run file 支持多文件