Excel文件是一种广泛使用的电子表格格式,用于存储和处理各种数据。在Python中,有多个库可以用于处理Excel文件,其中包括xlsxwriter和openplxl两个库。本文将介绍这两个库的使用方法以及如何使用它们来操作Excel文件。
1、xlsxwriter生成Excel文件
xlsxwriter是一个用于生成Excel文件的Python库,支持多种格式的Excel文件(如.xlsx、.xlsm、.xltx、.xltm等),并且支持自定义样式和格式。下面将以一个简单的示例,来逐步介绍如何使用xlsxwriter库创建一个Excel文件并写入数据
1.1、导入库并创建Excel文件
Excel文件名为:xlsxwriter插入数据和折线图.xlsx
import xlsxwriter, random
wb = xlsxwriter.Workbook('xlsxwriter插入数据和折线图.xlsx')
1.2、创建一个sheet页
sheet标签页名字为:sheet1
worksheet1 = wb.add_worksheet('sheet1')
1.3、按行写入数据
这里以写入Excel的头部数据为例:
headings = ['日期','数据1','数据2']
worksheet1.write_row('A1',headings)
1.4、按列写入数据
有了头部数据后,该写入下面的实际数据了
# 创造数据
data = [
['2019-1','2019-2','2019-3','2019-4','2019-5','2019-6','2019-7','2019-8','2019-9','2019-10','2019-11','2019-12',],
[random.randint(1,100) for i in range(12)],
[random.randint(1,100) for i in range(12)],
]
# 按列写入数据
worksheet1.write_column('A2',data[0])
worksheet1.write_column('B2',data[1])
worksheet1.write_column('C2',data[2])
1.5、新建图表对象
折线图表的定义:
chart_col = wb.add_chart({'type':'line'})
1.6、图表数据配置
这里的数据有两条,一个是数据1,一个是数据2,所以图表添加数据的代码如下:
chart_col.add_series(
{
'name':'=sheet1!$B$1',
'categoies':'=sheet1!$A$2:$A$7',
'values': '=sheet1!$B$2:$B$7',
'line': {'color': 'blue'},
}
)
chart_col.add_series(
{
'name':'=sheet1!$C$1',
'categories':'=sheet1!$A$2:$A$7',
'values': '=sheet1!$C$2:$C$7',
'line': {'color': 'green'},
}
)
有两条数据,所以添加了两次。
数据有四项,数据名、具体值对应的横坐标categories、具体值对应的纵坐标values、折线颜色,其中取值方式,直接是使用sheet的坐标形式,例如name是B1和B2,categories都是A2-A7,值分别是B2-B7和C2-C7。
1.7、完成图表
数据添加之后,在设置下坐标的相关信息,就是标题、x轴、y轴的名字,以及图表位置和大小,代码如下:
chart_col.set_title({'name':'虚假数据折线图'})
chart_col.set_x_axis({'name':"横坐标"})
chart_col.set_y_axis({'name':'纵坐标'})
worksheet1.insert_chart('D2',chart_col,{'x_offset':25,'y_offset':10})
wb.close()
图表的位置和大小,是根据左上角的起始表格和x和y的偏移计算的。
代码中是从D2做左上角起始,然后x和y分别便宜25和10个单位,得到了图片的最终大小。最后关闭wb。
2、openpyxl追加Excel数据
openplxl是一个用于读取现有的Excel文件的Python库,支持多种格式的Excel文件(如.xlsx、.xlsm、.xltx、.xltm等),并且支持读取单元格的数据。
2.1、打开文件
import openpyxl
filename = 'xlsxwriter插入数据和折线图.xlsx'
wb = openpyxl.load_workbook(filename)
2.2、拷贝sheet
sheet1 = wb['sheet1']
# 拷贝sheet1
sheet2 = wb.copy_worksheet(sheet1)
# 设置拷贝后的名称为sheet2
sheet2.title = "sheet2"
2.3、追加数据内容
在sheet2中,数据1和数据2追加一年的数据,代码如下:
# 读取最后一行
rows = sheet2.max_row
# 取出时间的字符串
prev_date_str = sheet2.cell(row=rows,column=1).value
# 时间字符串转时间对象
prev_date = datetime.datetime.strptime(prev_date_str, "%Y-%m")
for i in range(1,13):
# 月份的计算,每次增加一个月,就得到了第二年的12个月
tmp_date = prev_date + relativedelta(months=i)
tmp_num1 = random.randint(1,100)
tmp_num2 = random.randint(1,100)
sheet2.append([tmp_date.strftime("%Y-%m"), tmp_num1, tmp_num2])
实现思路:
- 读取出最后一行
- 取出时间字符串,然后转换成时间对象
- 一年12个月,循环12次,每次增加一个月,数值可以随机的生成,用random即可
- 数据的追加,是按每行,所以将【时间, 数据1, 数据2】通过append直接追加到数据最后即可
2.4、使用openpyxl画图表
在sheet2中对全部数据画折线图
from openpyxl.chart import Series,LineChart, Reference
# 图表对象
chart = LineChart()
rows = sheet2.max_row
# 创建series对象
data1 = Reference(sheet2, min_col=2, min_row=1, max_col=2, max_row=rows) #涉及数据
title1 = sheet2.cell(row=1,column=2).value
seriesObj1 = Series(data1, title=title1)
# 创建series对象
data2 = Reference(sheet2, min_col=3, min_row=1, max_col=3, max_row=rows) #涉及数据
title2 = sheet2.cell(row=1,column=3).value
seriesObj2 = Series(data2, title=title2)
# 添加到chart中
chart.append(seriesObj1)
chart.append(seriesObj2)
# 将图表添加到 sheet中
sheet2.add_chart(chart, "E3")
# 保存Excel
wb.save('poenpyxl插入数据和折线图[copy xlsxwriter].xlsx')
导入所需的画图工具,图表初始化,然后生成数据对象:
- data1的生成,因为索引从1开始,所以标题是第一行第二列,数据是第二行第二列,一直到最后一行第二列
- data2的生成,因为索引从1开始,所以标题是第一行第三列,数据是第二行第三列,一直到第二行最后三列
- 将两个数据都放到图表内
- 然后图表的开始位置,设置成E3,数据在ABC,E是空的,3距离顶部有两格的位置
最后文件保存,大功告成。
3、总结
本文介绍了如何使用xlsxwriter和openplxl两个库来操作Excel文件。xlsxwriter库可以用于创建新的Excel文件并写入数据,而openplxl库则可以用于读取现有的Excel文件并读取单元格的数据。这些库都是Python中处理Excel文件的好工具,可以帮助我们更加高效地处理各种数据。