目录
利用Python实现与Excel文档的联动
一.xls文档和xlsx文档的区别
- xls 是 Excel 1997-2003 版本的格式;.xlsx 是 Excel 2007 版本的格式
- .xls 是二进制的复合文档类型的结构;.xlsx 是用新的基于XML的压缩文件格式,使其占用空间更小,运算速度也会快一点,xlsx 中最后一个 x 的意义就在于此。
二.xlwt
创建xls文件
1.导入库
import xlwt
2.建立并写入
#创建工作簿
wb = xlwt.Workbook()
#创建表单
sh = wb.add_sheet('test')
#创建字体对象
font = xlwt.Font()
#字体加粗
font.bold = True
alm = xlwt.Alignment()
#设置左对齐
alm.horz = 0x01
#创建样式对象
style1 = xlwt.XFStyle()
style2 = xlwt.XFStyle()
style1.font = font
style2.alignment = alm
#write 方法参数1:行,参数2:列,参数3:内容
sh.write(0,0,"姓名",style1)#第二个参数如果是0,表示从第一列开始,开头不留出一列,否则会空出一列
sh.write(0,1,"年龄",style1)
sh.write(1,0,"张三")
sh.write(1,1,50,style2)
sh.write(2,0,"李四")
sh.write(2,1,30,style2)
sh.write(3,0,"王五")
sh.write(3,1,32,style2)
sh.write(4,0,"赵六")
sh.write(4,1,40,style2)
3.保存
wb.save("test.xls")
4.结果
第二个参数为0(如上示例代码),则如下图:
若为1:
三.xlsxwriter
创建xlsx文件
1.导入库
import xlsxwriter
2.建立并写入
#创建工作簿,建立的是文件
workbook = xlsxwriter.Workbook('test.xlsx')
#创建表单
sh = workbook.add_worksheet('test')#一页的表单
fmt1 = workbook.add_format()
fmt2 = workbook.add_format()
#字体加粗
fmt1.set_bold(True)
#设置左对齐
fmt2.set_align('left')
#数据
data = [
['','姓名','年龄'],
['','张三',20],
['','李四',30],
['','王五',40],
['','赵六',45]
]
#写入数据
for i in range(len(data)):
if( i == 0):
sh.write_row('A'+str(i+1),data[i],fmt1)
else:
sh.write_row('A'+str(i+1),data[i],fmt2)
3.作图
#做图表
chart = workbook.add_chart({'type':'line'})
#创建图表
chart.add_series(
{
'name':'=test!$B$1',
'categories':'=test!$B$2:$B5',
'values':'=test!$C$2:$C$5'
}
)
#设置图例
chart.set_title({'name':'年龄'})
chart.set_x_axis({'name':'姓名'})
chart.set_y_axis({'name':'年龄'})
sh.insert_chart('A9',chart)
4.保存
workbook.close()
5.结果
四.修改添加内容
1.导入库
import xlrd
import xlwt
from xlutils.copy import copy
2.修改
设计函数求平均值
#求平均年龄
def avg(list):
sumv = 0
for i in range(len(list)):
sumv += list[i]
return int(sumv/len(list))
修改文件内容
#formatting_info 为True表示保留原格式
wb = xlrd.open_workbook('test.xls',formatting_info = True)
#复制
wbc = copy(wb)
sh = wb.sheet_by_index(0)
age_list = sh.col_values(2)
age_list = age_list[1:len(age_list)-1]
avg_age = avg(age_list)
sh = wbc.get_sheet(0)
#设置左对齐
alm = xlwt.Alignment()
alm.horz = 0x01
style = xlwt.XFStyle()
style.alignment = alm
sh.write(5,1,"平均年龄",style)
sh.write(5,2,avg_age,style)
注意:这里不可以用xlsx文档,xlrd不支持xlsx
3.保存
wbc.save('test.xls')
4.结果