python excel
针对python 对excel的操作目前有已经有很多库可以使用,
比如最常用的读写库xlrd,xlwt,xlutils
对xlsx、xlsm读写的openpyxl
针对xlsx的xlsxwriter,方便操作图表数据
在网站上截取一个对比表,可以大概参考一下:
xlrd,xlwt, xlutils
对于xlrd,xlwt, xlutils这里就不多讲了,
xlrd:对xls、xlsx、xlsm文件进行读操作–读操作效率较高,推荐
xlwt:对xls文件进行写操作–写操作效率较高,但是不能执行xlsx文件,超出excel 的单格内容长度上限65536,就会报错;
xlutils:结合xlrd可以达到修改excel文件目的,需要注意的是你必须同时安装这三个库;
openpyxl
openpyxl:对xlsx、xlsm文件进行读、写操作–xlsx写操作推荐使用
针对openpyxl比较实用的就是能够对已有excel操作,追加数据
打开:openpyxl.load_workbook
写入时直接append列表,比较方便
对单元格读写使用cell
保存直接使用save函数
数据格式:
NULL空值:对应于python中的None,表示这个cell里面没有数据。
numberic: 数字型,统一按照浮点数来进行处理。对应于python中的float。
string: 字符串型,对应于python中的unicode。
Excel文件三个对象:
workbook: 工作簿,一个excel文件包含多个sheet。
sheet:工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。
cell: 单元格,存储数据对象
import openpyxl
xfile = openpyxl.load_workbook('test.xlsx')
sheet = xfile.get_sheet_by_name('Sheet1')
sheet['A1'] = 'hello world'
xfile.save('text1.xlsx')
当然也可以打开一个文件,然后激活它,在对他写入
from openpyxl import load_workbook
from pyecharts.faker import Faker
wb = load_workbook(filename=dest) # 打开一个已有的workbook
# wb = Workbook() # 创建一个工作簿(workbook)在创建的时候同时至少也新建了一张工作表(worksheet)
sheet_names = wb.get_sheet_names() # 获取sheet名
ws = wb.get_sheet_by_name(sheet_names[0]) # index为0为第一张表
ws.append(Faker.choose())
datas = []
for i in range(5):
ws.append(Faker.values())
# 对单元格的读写
c = ws['A4']
ws['A5'] = 34
ws['A1':'A3'] = [23, 45,67]
ws.cell(row = 4, column = 2).value = 'test'
# 保存
wb.save(dest)
xlsxwriter
xlsxwriter可以写excel文件并加上图表,缺点是不能打开/修改已有文件,意味着使用 xlsxwriter 需要从零开始。
import xlsxwriter
from pyecharts.faker import Faker
filename = 'test.xlsx'
test_book = xlsxwriter.Workbook(filename)
worksheet = test_book.add_worksheet('what')
datas = zip(Faker.choose(), Faker.values())
# 定义起始的行列 会在这个基础上 行列各加一 作为初始行列
row = 0
col = 0
for item, cost in datas:
worksheet.write(row, col, item)
worksheet.write(row, col+1, cost)
row += 1
worksheet.write(row, col, '总和')
worksheet.write(row, col+1, '=SUM(B1,B7)')
# 冻结单元格
worksheet.freeze_panes(1, 1)
test_book.close()
当然其操作表格是十分方便的
chart = test_book.add_chart({'type': "line"}) # 创建折线chart 对象
# 设置图表的title 和 x,y轴信息
chart.set_title({"name": "name", "name_font": {'name': 'Arial', "color":"blue", "size":12, 'bold': True}})
# 设置图标风格和大小
chart.set_style(1)
chart.height = 300
chart.width = 600
# legend 位置设置
chart.set_legend({'position': 'bottom'}) # top ,left,right,bottom
# 添加series
series = {
'name': 'name',
'line': {'color': "#A01212",'width': 3}, # 显示的颜色
'data_labels': {'value': False}, # 不显示在图表上的数据标签
'categories': '=what!$A$1:$A$5',
'values': '=what!$B$1:$B$5',
}
chart.add_series(series)
# 把图表插入到worksheet并设置偏移
worksheet.insert_chart('A1', chart, {'x_offset':200, 'y_offset': 100})
当然你也可以在一个sheet中添加多个series
生成这样的效果
自己写了一个小工具将txt文本数据生成如上的excel表格和echarts表的