将excel转换成Json格式

平时使用excel较多,但是编程使用json格式较多,每次转换都很麻烦。所以写了一个小脚本。实现的思路很简单,利用xlrd操作excel,把表头作为字典的字段,逐行读取记录,其中数字python默认是float类型,此处写死强行换成str类型。最后利用Python的json包dumps一下,不过要注意ensure_ascii=False,不然会输出'/u989'之类的编码,indent = 2是为了输出的美观。

# -*- coding: utf-8 -*-
# 这段代码主要的功能是把excel表格转换成utf-8格式的json文件
import os
import sys
import codecs
import xlrd 
import xdrlib
import json
reload(sys)
sys.setdefaultencoding( "utf-8" )
def open_ecxcel(file):
    try:
        data = xlrd.open_workbook(file)
        return data
    except Exception , e:
        print str(e)

#根据名称获取Excel表格中的数据   参数:file:Excel文件路径     colnameindex:表头列名所在行的所以  ,by_name:Sheet1名称
def excel_table_byname(file,colnameindex=0,by_name=u'Sheet1'):
    data = open_ecxcel(file)
    table = data.sheet_by_name(by_name)
    nrows = table.nrows
    colnames = table.row_values(colnameindex)
    records = []
    for rownum in range(1,nrows):
        row = table.row_values(rownum)
        if row:
            record = {}
            for i in range(len(colnames)):
                #excel 默认float ,强制类型转换
                if type(row[i]) == float:
                    row[i] = int(row[i])
                    row[i] = str(row[i])
                record[colnames[i]] = row[i]
        records.append(record)
    return records

#open_ecxcel('wzsj.xlsx')
recodes = excel_table_byname('wzsj.xlsx')
encodedjson = json.dumps(recodes,ensure_ascii=False,indent=2)
#encodedjson = json.dumps(recodes)
print encodedjson
output = open('data11.json', 'w+')
output.write(encodedjson)

其中关于读取excel数据还可以利用表格的索引值,代码如下

#根据索引获取Excel表格中的数据   参数:file:Excel文件路径     colnameindex:表头列名所在行的所以  ,by_index:表的索引
def excel_table_byindex(file,colnameindex=0,by_index=0):
    data = open_ecxcel(file)
    table = data.sheets()[by_index]
    nrows = table.nrows #行数
    ncols = table.ncols #列数
    colnames =  table.row_values(colnameindex) #某一行数据 
    records = []
    for rownum in range(1,nrows):

         row = table.row_values(rownum)
         if row:
             record = {}
             for i in range(len(colnames)):
                record[colnames[i]] = row[i] 
             records.append(record)
    return records

你可能感兴趣的:(将excel转换成Json格式)