python-excel驱动之xlsxwriter

安装

xlsxwriter是一个非标准库,因此需要自行安装,安装过程并不困难,Windows/Mac用户均可以在命令行(CMD)/终端(Terminal)中使用pip安装

pip install xlsxwriter

配合openpyxl使用

由于xlsxwriter设计初衷时创建新文件,所以没有直接提供打开已存在工作表的方法。我们可以利用 openpyxl 模块来打开已存在的工作表,并且结合 XlsxWriter 的功能来进行编辑和写入数据。

示例:xlwt打开已有文档yxy.xlsx,创建一个临时文档

import xlsxwriter
import openpyxl
workbook = openpyxl.load_workbook(filename='yxy.xlsx')		#用openpyxl打开文件
worksheetname = workbook.sheetnames		#读取所有工作表
tempbook = xlsxwriter.Workbook('tempbook.xlsx')		#用xlwt打开一个
for sheetname in worksheetname:
    worksheet = workbook[sheetname] 
    tempsheet = tempbook.add_worksheet(sheetname)
    for row in range(1,worksheet.max_row+1):
        for col in range(1,worksheet.max_column+1):
            cell_value = worksheet.cell(row=row,column=col).value
            tempsheet.write(row-1,col-1,cell_value)

tempbook.close()

在这里插入图片描述

其他基本操作,详见openpyxl

插入图片/内部链接

import xlsxwriter
import openpyxl
workbook = openpyxl.load_workbook(filename='yxy.xlsx')
worksheetname = workbook.sheetnames
tempbook = xlsxwriter.Workbook('tempbook.xlsx')
for sheetname in worksheetname:
    worksheet = workbook[sheetname] 
    tempsheet = tempbook.add_worksheet(sheetname)
    for row in range(1,worksheet.max_row+1):
        for col in range(1,worksheet.max_column+1):
            cell_value = worksheet.cell(row=row,column=col).value
            tempsheet.write(row-1,col-1,cell_value)
#以上为打开已有文件

tempsheet = tempbook.sheetnames ['测试项目']
tempsheet.insert_image('E1',r'C:\Users\Administrator\Desktop\演示图片.png')
#第二个参数为图片的绝对链接,由于字符串中含多个反斜杠\,使用r前缀来表示路径字符串

tempsheet = tempbook.sheetnames ['测试项目']
tempsheet.write_url(20,0, "internal:%s!B3" % ("测试2"), string="点击跳转到测试2工作表的B3单元格")		#“20”和“0”分别指在21行和1列插入内容,“%s!B3" % ("测试2")”表示这个链接指向测试2工作表的B3单元格,"点击跳转到测试2工作表的B3单元格"为显示的文字

tempbook.close()

在这里插入图片描述

点击链接后
在这里插入图片描述

插入图表

  1. 插入图表
chart = workbook.add_chart({'type': 'column','subtype': 'stacked'})

'type’指图表类型,'subtype’指某些图表类型中的子类型

  • area:创建一个Area(实线)样式表。
  • bar:创建条形样式(转置直方图)图表。
  • column:创建列样式(直方图)图表。
  • line:创建线型图表。
  • pie:创建一个饼图样式图表。
  • doughnut:创建一个甜甜圈样式表。
  • scatter:创建散点图样式图。
  • stock:创建一个股票样式图。
  • radar:创建雷达样式表。
  1. 插入数据
chart.add_series(options)

optios格式为{‘values’: '=工作表名! 列对应字母 列对应字母 列对应字母行对应数字: 列对应字母 列对应字母 列对应字母行对应数字,‘name’:‘系列名称’}

  1. 插入位置
worksheet.insert_chart('A7', chart)
  1. 设置X轴Y轴属性
chart.set_x_axis({
    'name': 'x轴名称',
    'name_font': {'size': 12, 'bold': True},
    'num_font':  {'italic': True },
})

这是设置X轴的属性:第一个参数name是指轴的名称,name_font设置x轴的字体属性,这里设置了粗体和大小。num_font指轴编号(也即如图中x轴下方的1234)的字体属性这里设置了斜体。Y轴类似

  1. 合并不同类型的图表
chart.combine(line_chart)

chart是原表格,line_chart是要叠加的表格

  1. 设置图表尺寸
chart.set_size({'width': 720, 'height': 576})
chart.set_size({'x_scale': 1.5, 'y_scale': 2})
worksheet.insert_chart('E2', chart, {'x_offset': -10, 'y_offset': 5})

函数里面有六个参数:width、height,x_offset,y_offset
前两个代表宽度与高度是以像素为单位,默认的图表的宽度*高度为480 x 288像素。
后两个参数是设置类型图片在整个chart图表区域中移动。含义用一张表格来说明
在这里插入图片描述

  1. 设置图表标题
chart.set_title({'name': '常见数列'})
chart.set_title({
    'name': '常见数列',
    'overlay': True,
    'layout': {
        'x': 0.62,
        'y': 0.24,
    }
})
chart.set_title({'none': True})  #关闭此默认标题同时关闭所有其他set_title()选项。

name指标题;overlay代表允许标题覆盖到图表上通常与layout一起使用。layout以图表相对单位设置标题的位置(x, y)。

  1. 设置图例
chart.set_legend({'none': True})
chart.set_legend({'position': 'none'})
chart.set_legend({'position': 'bottom'})
chart.set_legend({'font': {'size': 4, 'bold': True}})
chart.set_legend({'delete_series': [0, 3]})

none:关闭图例;默认是开启的。position:图例的位置。font:图例的字体属性。delete_series:删除指定图例,以列表呈现。

  1. 设置默认图表样式
    用set_style(num)函数,用于将图表的样式设置为Excel中“设计”选项卡上可用的48种内置样式之一。参数num就是48种内置样式之一。

  2. 设置图表区域

chart.set_chartarea({
    'fill':   {'color': 'black'}
})

fill:设置图表区域的实心填充属性,例如颜色。

  1. 图表下方添加数据表
    用set_table()函数在水平轴下方添加一个数据表。

实例

import xlsxwriter
import openpyxl
workbook = openpyxl.load_workbook(filename='yxy.xlsx')
worksheetname = workbook.sheetnames
tempbook = xlsxwriter.Workbook('tempbook.xlsx')
for sheetname in worksheetname:
    worksheet = workbook[sheetname] 
    tempsheet = tempbook.add_worksheet(sheetname)
    for row in range(1,worksheet.max_row+1):
        for col in range(1,worksheet.max_column+1):
            cell_value = worksheet.cell(row=row,column=col).value
            tempsheet.write(row-1,col-1,cell_value)
#以上为打开已有文件
tempsheet = tempbook.sheetnames['测试3']

chart = tempbook.add_chart({'type':'column'})
#创建直方图


cols = ['A','B','C','D']
rows = [2,8]
max_row = max(rows)
min_row = min(rows)
for col in cols:
    worksheet1 = workbook['测试3']
    colname = worksheet1['%s1' % col]		#由于xlwt模块无法读取文件内容,因此需要用openpyxl里面的workbook来处理标题,此处不能用tempbook和tempsheet
    chart.add_series({'values':'=测试3!$%s$%s:$%s$%s' % (col,min_row,col,max_row),
    'name':colname.value})
#插入直方图数据


chart.set_title({'name': '常见数列'})
#设置表格标题

chart.set_table()
#在图表下方插入数据表

tempsheet.insert_chart('A9', chart)
#图表插入位置A9


tempbook.close()

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值