一、背景
在数据处理和系统集成场景中,excel 与 json 是两种极为常见的数据格式。excel 凭借其直观的表格呈现和广泛的兼容性,长期占据业务数据收集、审核与共享的主导地位;而 json 凭借其轻量、结构灵活的特点,在 web 应用、rest api 和系统间数据交换中更为常用。因此,将 excel 数据导出为 json,是从人工维护的表格数据过渡到机器可读格式的常见需求。
本文将介绍如何使用 free spire.xls for python 这一免费库,实现 excel 到 json 的导出。该库无需安装 microsoft excel 即可读写 .xls、.xlsx 等格式的 excel文件,适用于服务器环境和自动化任务。
二、环境准备
2.1 安装
免费 python 库可通过 pip 直接安装:
pip install spire.xls.free
该库支持python 3.6及以上版本,兼容windows、linux和macos。
2.2 导入方式
在代码中引入所需模块:
from spire.xls import workbook, fileformat import json
三、excel 转 json 的几种实现方式
3.1 方式一:将整个工作簿直接转换为json
从 spire.xls for python 16.7.1 版本开始,该库原生支持将 excel 工作簿直接保存为 json 格式。这是最简洁的方式:
from spire.xls import workbook, fileformat
import os
input_file = "销售数据.xlsx"
output_file = "output/工作簿.json"
os.makedirs("output", exist_ok=true)
workbook = workbook()
workbook.loadfromfile(input_file)
workbook.savetofile(output_file, fileformat.json)
workbook.dispose()
执行后,生成的 json 中每个工作表名称会作为顶层键,工作表第一行的标题会转换为json属性名,后续每一行数据则转换为一个json对象。例如,一个包含“销售数据”工作表的excel文件,生成的json结构大致如下:
{
"销售数据": [
{
"订单编号": "so-1001",
"客户名称": "北方科技有限公司",
"产品名称": "笔记本电脑支架",
"数量": 3,
"单价": 349,
"订单状态": "已完成"
}
]
}如果工作簿包含多个工作表,每个工作表都会在同一个 json 文件中对应一个独立的顶层键。
3.2 方式二:将指定工作表导出为 json (免费版适用)
如果只需导出某个特定的工作表,可以先获取该工作表,然后手动构造json数据:
from spire.xls import workbook
import json
workbook = workbook()
workbook.loadfromfile("销售数据.xlsx")
# 获取第一个工作表
sheet = workbook.worksheets[0]
# 获取最大行列
rows = sheet.lastrow
cols = sheet.lastcolumn
# 提取表头(第一行)
headers = [sheet.range[1, i + 1].text for i in range(cols)]
# 逐行构造json数据
data = []
for r in range(2, rows + 1):
row_dict = {}
for c in range(1, cols + 1):
row_dict[headers[c - 1]] = sheet.range[r, c].text
data.append(row_dict)
# 写入json文件
with open("指定工作表.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=false, indent=2)
workbook.dispose()
3.3 方式三:将指定单元格区域导出为 json (免费版适用)
当只需要导出 excel 中某个特定区域的数据时,可以通过 worksheet.range[] 获取目标区域:
from spire.xls import workbook
import json
workbook = workbook()
workbook.loadfromfile("销售数据.xlsx")
sheet = workbook.worksheets[0]
# 获取指定单元格区域(例如a1到d10)
target_range = sheet.range["a1:d10"]
# 获取区域的行列数
rows = target_range.lastrow - target_range.firstrow + 1
cols = target_range.lastcolumn - target_range.firstcolumn + 1
# 提取表头
headers = [target_range[1, i + 1].text for i in range(cols)]
# 提取数据
data = []
for r in range(2, rows + 1):
row_dict = {}
for c in range(1, cols + 1):
row_dict[headers[c - 1]] = target_range[r, c].text
data.append(row_dict)
with open("指定区域.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=false, indent=2)
workbook.dispose()
四、注意事项
4.1 免费版的限制
free spire.xls for python 作为免费版本,存在以下限制:
- 读写 .xls(excel 97-2003)格式时,每个工作簿最多5个工作表,每个工作表最多200行数据。
- 读写 .xlsx 格式时没有上述限制。
- 将excel转换为其他格式时,仅支持前3页。
4.2 编码问题
导出的 json 件中若包含中文,需要在写入文件时指定 encoding="utf-8",并在 json.dump() 中设置 ensure_ascii=false,以避免中文被转义为 unicode 编码。
4.3 资源释放
操作完成后建议调用 dispose() 方法释放资源,尤其是在批量处理多个文件时。
五、总结
以上示例提供了一种无需依赖 microsoft excel 即可将 excel 数据导出为 json 的解决方案。对于中小规模的数据处理需求,尤其是需要在无图形界面的服务器环境中运行的场景,它是一个值得考虑的选择。用户可以根据实际需求,选择直接转换整个工作簿、导出指定工作表或区域等不同方式。
到此这篇关于python使用free spire.xls for python实现将excel数据导出为json文件的文章就介绍到这了,更多相关python excel数据导出为json内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论