Python(一)Excel办公自动化-xlrd、xlwt、xlsxwriter

一、从excel里读取文件

import xlrd  #导入xlrd包
#获取表
chart = xlrd.open_workbook("需求整理表.xlsx")
#获取sheet
sheet1 = chart.sheet_by_index(0)  #通过索引获取sheet表
sheet2 = chart.sheet_by_name("汇总") #通过表名获取
#获取行、列
print(sheet1.nrows)  #获取工作表中有内容的行数总和
print(sheet1.row_values(0))  #获取第一行值
print(sheet1.ncols) #获取工作表中有内容的列数总和
print(sheet1.col_values(1)) #获取第一列值
#获取单元格
print(sheet1.cell_value(0,1)) #获取第一行,第二列单元格上的值
print(sheet1.row_types(2)) #获取第三列的类型(2-int,1-string)

二、写入excel

#写入表格
import xlwt
from PIL import Image

#设置标题格式
titlestytle = xlwt.XFStyle()  #初始化样式
titlefont = xlwt.Font()
titlefont.name = '宋体' #设置字体
titlefont.bold = True  #加粗
titlefont.height = 11*20  #设置字号(11号字体,20为固定单位)
titlefont.colour_index=0x08  #设置字体颜色
titlestytle.font = titlefont #给标题样式设置以上定义字体

#单元格对其方式
cellailgn = xlwt.Alignment()
cellailgn.horz =0x02  #设置水平对齐
cellailgn.vert =0x01  #设置居中对齐
titlestytle.alignment = cellailgn  #给标题样式设置以上定义对齐方式

#添加边框
border = xlwt.Borders()
border.right = xlwt.Borders.DASHED  #设置为虚线
border.bottom = xlwt.Borders.DOTTED  #设置为斑点(具体线框可以到Borders包中选择)
titlestytle.borders = border  #给标题样式设置以上定义边框

#创建工作薄
wt = xlwt.Workbook()
#创建工作表
sheet2 = wt.add_sheet("汇总")
#插入标题
sheet2.write_merge(0,1,0,5,"排期表",titlestytle)  #标题合并
#插入数据(元组格式)
data = (("编号","项目名称","系统","项目","开发排期","测试排期"
),(1,"#5421聚合支付业务需求	","联机","内部优化",	"20191210 - 20191212","20200218-20200221"
),(2,"#6723文件下载新增名称映射关系", "平台",	"内部优化",	"20200217 - 20200219","20200226-20100228"
))
for i,itms in enumerate(data):
    for j,val in enumerate(itms):
        sheet2.write(i+2,j,val)

#新增第二个工作表
sheet3 = wt.add_sheet("平台")
#将jpg转换为bmp
img = Image.open("微信截图.jpg")
r, g, b, a = img.split()
img = Image.merge("RGB", (r, g, b))
img.save('微信截图.bmp')
sheet3.insert_bitmap("微信截图.bmp",0,0)

#保存sheet,不支持xlsx格式,xlsx格式创建完成后无法正常打开,只支持xls格式
wt.save("排期表.xls")

生成表格展示
Python(一)Excel办公自动化-xlrd、xlwt、xlsxwriter_第1张图片

三、使用xlsxwriter写入表格,并且根据表格数据生成图表

xlsxwriter也是python提供的第三方模块,用于向生成的Excel表格插入数据、图表等操作,是xlwt的升级版,支持更多的Excel功能,兼容Excel xlsx文件,支持Excel2003、2007等版本,xlsxwriter处理速度更快且支持大文件的写入。

import xlsxwriter

#创建工作薄
wb = xlsxwriter.Workbook("data.xlsx")
#格式化
cell_format = wb.add_format({"bold":True})  #格式对象
cell_format1 = wb.add_format()  #格式对象
cell_format1.set_bold()  #加粗
cell_format1.set_color("red") #设置颜色
cell_format1.set_size(14)  #设置颜色
cell_format1.set_align("center")  #对齐方式 居中
#创建工作表
sheet = wb.add_worksheet("new_sheet")
#写入
sheet.write(0,0,"2020年度",cell_format)
sheet.merge_range(1,0,3,2,"销售表",cell_format1)
data = (
    ["一月份",20,300],
    ["二月份",30,400],
    ["三月份",40,500]
)
#写入一行,表头
sheet.write_row(2,0,["月份","预期销售额","实际销售额"])
#写入数据
for i,j in enumerate(data):
    sheet.write_row(i+4,0,j)

#计算数量总和
sheet.write(7,1,"=sum(B5:B7)")
sheet.write(7,2,"=sum(C5:C7)")

#添加链接
sheet.write_url(9,0,"http://test.quick.ipay.so",string="更多数据")

#插入图片
sheet.insert_image(10,0,"微信截图.jpg")

#创建图表对象
chart = wb.add_chart({"type":"column"})  #图表类型为柱状图
#设置图表标题
chart.set_title({"name":"第一季度销售柱状图"})
#设置X,Y轴描述信息
chart.set_x_axis({"name":"月份"})
chart.set_y_axis({"name":"销售额"})
#数据
chart.add_series(
    {"name":"预期销售额",
     "categories":"=new_sheet!$B$5:$B$7",
     "values":['new_sheet',4,1,6,1],
    "data_labels":{"values":True}
     }
)

chart.add_series(
    {"name":"实际销售额",
     "categories":['new_sheet',4,2,6,2],
     "values":"=new_sheet!$C$5:$C$7",
     "data_labels":{"values":True}
     }
)
#插入图表
sheet.insert_chart(24,0,chart)
#关闭
wb.close()


生成图表展示
Python(一)Excel办公自动化-xlrd、xlwt、xlsxwriter_第2张图片

你可能感兴趣的:(Python,python)