json2xls¶
根据json数据生成excel表格,默认支持生成单层json的Excel,多层json会默认被转化为单层,也可以自定义多层样式的生成方法。
json数据来源可以是一个返回json的url,也可以是一行json字符串,也可以是一个包含每行一个json的文本文件
安装¶
json2xls
代码托管在 GitHub,并且已经发布到 PyPI,可以直接通过 pip 安装:
$ pip install json2xls
源码安装:
$ python setup.py install
json2xls
以 MIT 协议发布。
使用教程¶
API调用:
from json2xls import Json2Xls
# 从json字符串生成excel
json_data = u'''[
{"姓名": "John", "年龄": 30, "性别": "男"},
{"姓名": "Alice", "年龄": 18, "性别": "女"}
]'''
obj = Json2Xls('tests/json_strlist_test.xls', json_data)
obj.make()
# 从get请求返回的json生成excel
params = {
'location': u'上海',
'output': 'json',
'ak': '5slgyqGDENN7Sy7pw29IUvrZ'
}
Json2Xls('tests/url_get_test.xls', "http://httpbin.org/get", params=params).make()
# 从post请求返回的json生成excel
post_data = {
'location': u'上海',
'output': 'json',
'ak': '5slgyqGDENN7Sy7pw29IUvrZ'
}
Json2Xls('tests/url_post_test1.xls', "http://httpbin.org/post", method='post', post_data=post_data, form_encoded=True).make()
# 如果post_data很复杂很长可以写到一个文件里
post_data = 'tests/post_data.json'
Json2Xls('tests/url_post_test2.xls', "http://httpbin.org/post", method='post', post_data=post_data, form_encoded=True).make()
# 从文件内容为每行一个的json字符串的文件生成excel
obj = Json2Xls('tests/json_line_test.xls', json_data='tests/line_data.json')
obj.make()
# 从文件内容为一个json列表的文件生成excel
Json2Xls('tests/json_list_test.xls', json_data='tests/list_data.json').make()
# 自定义生成excel
def title_callback(self, data):
'''use one of data record to generate excel title'''
self.sheet.write_merge(0, 0, 0, 3, 'title', self.title_style)
self.sheet.write_merge(1, 2, 0, 0, 'tag', self.title_style)
self.sheet.write_merge(1, 2, 1, 1, 'ner', self.title_style)
self.sheet.write_merge(1, 1, 2, 3, 'comment', self.title_style)
self.sheet.row(2).write(2, 'x', self.title_style)
self.sheet.row(2).write(3, 'y', self.title_style)
self.sheet.write_merge(0, 0, 4, 7, 'body', self.title_style)
self.sheet.write_merge(1, 2, 4, 4, 'tag', self.title_style)
self.sheet.write_merge(1, 2, 5, 5, 'ner', self.title_style)
self.sheet.write_merge(1, 1, 6, 7, 'comment', self.title_style)
self.sheet.row(2).write(6, 'x', self.title_style)
self.sheet.row(2).write(7, 'y', self.title_style)
self.start_row += 3
def body_callback(self, data):
key1 = ['title', 'body']
key2 = ['tag', 'ner', 'comment']
col = 0
for ii, i in enumerate(key1):
for ij, j in enumerate(key2):
if j != 'comment':
value = ', '.join(data[ii][i][j])
self.sheet.row(self.start_row).write(col, value)
col += 1
else:
for x in data[ii][i][j].values():
self.sheet.row(self.start_row).write(col, x)
col += 1
self.start_row += 1
data = 'tests/callback_data.json'
j = Json2Xls('tests/callback.xls', data)
j.make(title_callback=title_callback, body_callback=body_callback)
命令行:
# from json string
json2xls tests/cmd_str_test.xls '{"a":"a", "b":"b"}'
json2xls tests/cmd_str_test1.xls '[{"a":"a", "b":"b"},{"a":1, "b":2}]'
# from file: whole file is a complete json data
json2xls tests/cmd_list_test.xls "`cat tests/list_data.json`"
# from file: each line is a json data
json2xls tests/cmd_line_test.xls tests/line_data.json
# from url
json2xls tests/cmd_get_test.xls http://httpbin.org/get
json2xls tests/cmd_post_test.xls http://httpbin.org/post -m post -d '"hello json2xls"' -h "{'X-Token': 'bolobolomi'}"
API¶
-
class
json2xls.
Json2Xls
(xls_filename, json_data, method='get', params=None, post_data=None, headers=None, form_encoded=False, dumps=False, sheet_name='sheet0', title_style=None)[source]¶ Json2Xls API 接口
Parameters: - xls_filename (string) – 指定需要生成的的excel的文件名
- json_data (string) – 指定json数据来源, 可以是一个返回json的url, 也可以是一行json字符串, 也可以是一个包含每行一个json的文本文件
- method (string) – 当数据来源为url时,请求url的方法, 默认为get请求
- params (dict) – get请求参数,默认为
None
- post_data (dict) – post请求参数,默认为
None
- headers (dict) – 请求url时的HTTP头信息 (字典、json或文件)
- form_encoded (bool) – post请求时是否作为表单请求,默认为
False
- sheet_name (string) – Excel的sheet名称,默认为 sheet0
- title_style (string) – Excel的表头样式,默认为
None
- json_dumps (function) – 带ensure_ascii参数的json.dumps(),
默认参数值为
False
- json_loads (function) – 带object_pairs_hook参数的json.loads(),默认为保持原始排序
- dumps (bool) – 生成excel时对表格内容执行json_dumps,默认为
False
-
auto_width
(row, col, value)[source]¶ 单元格宽度自动伸缩
Parameters: - row (int) – 单元格所在行下标
- col (int) – 单元格所在列下标
- value (int) – 单元格中的内容