前言
读取excel文件并导出为json文件,便于其他程序调用
一、代码
# coding=UTF-8
import xlrd
import json
def convert2json(filename,keep_header=False):
xlrd.Book.encoding = "utf-8"
# 打开 Excel 文件
workbook = xlrd.open_workbook(filename)
# 获取第一个工作表
worksheet = workbook.sheet_by_index(0)
# 创建一个空列表
data = []
# 遍历每一行
for row_index in range(worksheet.nrows):
# 读取每一行的数据
row_data = worksheet.row_values(row_index)
# 将读取到的数据添加到列表中
data.append(row_data)
dic = {}
content = []
row = len(data)
column = len(data[0])
start = 1-int(keep_header)
for i in range(start,row,1):
for j in range(column):
content.append(data[i][j])
dic[data[i][0]] = content
content = []
with open('测试.json', 'w', encoding='utf-8') as file:
json.dump(dic, file, ensure_ascii=False, indent=2)
if __name__ == "__main__":
convert2json('测试.xls',keep_header=False)
二、说明
高版本的xlrd库只支持读写xls格式的文件,不支持xlsx,否则会报错。(这个有点无语)
需要将表格内容按xls格式另存为,不能只修改文件后缀名。
json.dump(dic, file, ensure_ascii=False, indent=2)
这行代码将读取构建好的字典内容转为json文件并保存,其中ensure_ascii=False用于保留原有字符,否则中文会出现乱码;indent=2将json内容换行缩进2字符,否则所有json内容均在一行内,没有换行导致查看非常不变
start = 1-int(keep_header)
这行代码将“是否保留表头”的布尔值转换为数字,当布尔值为True时从0开始for循环;当布尔值为False时从1开始for循环,这样可以节约for循环部分代码,避免出现过多if else
三、后续更新
后续补充纵向布局excel内容的转换(将for循环顺序调转即可),以及将json文件转为excel文件的代码