linux,  python

Python操作Excel (xlsxwriter模块)

xlsxwriter 只允许写入.xlsx格式的文件,它的精华在于写入(多张样式图表、图片、表格样式修改等)

它的缺点就是不支持读取和修改,它只能创建新的文件如果创建新文件时与原有文件同名,则会覆盖原有文件,读者想完美读取功能的话,可以结合xlsxreader来实现,两者结合可谓真正完整的Excel+XLSX再现。

其次,它不支持XLS文件的写入,XLS文件是一种二进制格式的文件。如果读者想创建XLS格式文件的话可以参考xlwt模块。

安装与概览

安装很简单,没有什么特别要注意的,直接在命令行/终端中安装即可

pip install XlsxWriter

在正式讲解之前我们需要简单了解Xlsxwriter的基本流程如下

创建Excel文件

import xlsxwriter
workbook = xlsxwriter.Workbook('data.xlsx')
workbook.close()

创建工作表

默认情况下,Excel文件中的工作表按代码执行顺序名称依次为Sheet1、Sheet2等。但是我们也可以指定一个名称,如上我们在函数内加入了’数据’

import xlsxwriter
workbook = xlsxwriter.Workbook('data.xlsx')
worksheet = workbook.add_worksheet('数据')
workbook.close()

写入单个数据

注意的是在XlsxWriter中,row行和col列的索引为零也即工作表的第一个单元格A1为(0,0)

如果我们需要写入多行多列数据的话,可以用for循环。在这里举个例子呈现。

import xlsxwriter

workbook = xlsxwriter.Workbook('data.xlsx')
worksheet = workbook.add_worksheet('数据')

#写入数据以元组套列表形式
data = (
    ['春天',20],
    ['夏天',30],
    ['秋天',25],
    ['冬天',10],
)

#设置初始的输入数据的位置
row = 0
col = 0

#for循环添加数据
for weather, tem in data:
    worksheet.write(row, col,weather)
    worksheet.write(row, col + 1, tem)
    row += 1
workbook.close()

写入一整行或一整列数据

worksheet.write_row(“A1”,data,bold)
worksheet.write_column(“A1”,data,bold)

第一行代码为按行插入且从A1单元格开始,data为要写入的数据(格式为一个列表),bold为单元格样式。第二行代码与之不同的是按列插入。

import xlsxwriter

workbook = xlsxwriter.Workbook('data.xlsx')
worksheet = workbook.add_worksheet('数据')

data = ['春天',20]
bold = workbook.add_format({
        'bold':  True,  # 字体加粗
        'border': 1,  # 单元格边框宽度
        'align': 'left',  # 水平对齐方式
        'valign': 'vcenter',  # 垂直对齐方式
        'fg_color': '#F4B084',  # 单元格背景颜色
        'text_wrap': True,  # 是否自动换行
    })
worksheet.write_row("A1",data,bold)

workbook.close()
import xlsxwriter

workbook = xlsxwriter.Workbook('data.xlsx')
worksheet = workbook.add_worksheet('数据')

data = ['春天','夏天','秋天','冬天']
bold = workbook.add_format({
        'bold':  True,  # 字体加粗
        'border': 1,  # 单元格边框宽度
        'align': 'left',  # 水平对齐方式
        'valign': 'vcenter',  # 垂直对齐方式
        'fg_color': '#F4B084',  # 单元格背景颜色
        'text_wrap': True,  # 是否自动换行
    })
worksheet.write_column("A1",data,bold)

workbook.close()

插入图片、图表

1.插入图片

import xlsxwriter

workbook = xlsxwriter.Workbook('data.xlsx')
worksheet = workbook.add_worksheet('数据')
worksheet.insert_image('A1',r'图片绝对路径')# 第一个参数是你要指定哪个单元格插入图片,第二个参数是存放图片的绝对路径。

workbook.close()

2.插入超链接

import xlsxwriter

workbook = xlsxwriter.Workbook('data.xlsx')
worksheet = workbook.add_worksheet('数据')

row = 0
col = 0
worksheet.write_url(row, col, "http://www.baidu.com/", string="百度一下")  # row和col参数都是设置位置信息,string链接显示名字

workbook.close()

3.插入图表

1)add_chart({'type': 'column','subtype': 'stacked'}) 函数是最经典的插入图表函数,字典里的第一个键type参数指的是放入的图表类型。而第二个键指的是某些图表类型中的图表子类型

支持的图表类型有以下:

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

2)设置了图表类型接下来就是插入数据,插入数据我们用add_series(options)函数这里的options是以字典形式的图表数据,在Excel中图表系列是一组信息(值、轴标签、格式等)。

3)insert_chart()函数是将图表插入到工作表指定的位置,第一个参数为单元格位置信息,第二个参数为选定的图表。

import xlsxwriter

workbook = xlsxwriter.Workbook('data.xlsx')
worksheet = workbook.add_worksheet('数据')


chart = workbook.add_chart({'type': 'column'})
data = [
    ['A','B','C','D','E'],
    [3, 6, 9, 12, 15],
    [2, 4, 6, 8, 10],
    [1, 2, 3, 4, 5],
]

worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])
worksheet.write_column('D1', data[2])

chart.add_series(
    {'name': "系列一",
     'categories':'数据!$A$1:$A$5',
     'values': '=数据!$B$1:$B$5',
     })
chart.add_series(
    {'name': "系列二",
     'categories': '数据!$A$1:$A$5',
     'values': '=数据!$C$1:$C$5',
     })
chart.add_series(
    {'name': "系列三",
     'categories': '数据!$A$1:$A$5',
     'values': '=数据!$D$1:$D$5',
     })

worksheet.insert_chart('A7', chart)
workbook.close()

chart.add_series()函数中最常用的四个选项为name、categories、values、line,其中name是设置系列名,categories是设置图表类别标签范围;values为设置图表数据范围{‘values’: ‘=工作表名!$列对应字母$行对应数字:$列对应字母$行对应数字’};line为设置图表线条属性,包括颜色、宽度等。

4.设置x轴与y轴属性

chart.set_x_axis({
    'name': '名字',
    'name_font': {'size': 12, 'bold': True},
    'num_font':  {'italic': True },
})

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

同理,y轴、子图xy轴的设置也是一样的,区别在于将代码中的x换成对应的y和x。

import xlsxwriter

workbook = xlsxwriter.Workbook('data.xlsx')
worksheet = workbook.add_worksheet('数据')


chart = workbook.add_chart({'type': 'column'})
data = [
    ['A','B','C','D','E'],
    [3, 6, 9, 12, 15],
    [2, 4, 6, 8, 10],
    [1, 2, 3, 4, 5],
]

worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])
worksheet.write_column('D1', data[2])

chart.add_series(
    {'name': "系列一",
     'categories':'数据!$A$1:$A$5',
     'values': '=数据!$B$1:$B$5',
     })
chart.add_series(
    {'name': "系列二",
     'categories': '数据!$A$1:$A$5',
     'values': '=数据!$C$1:$C$5',
     })
chart.add_series(
    {'name': "系列三",
     'categories': '数据!$A$1:$A$5',
     'values': '=数据!$D$1:$D$5',
     })

chart.set_x_axis({
    'name': '字母',
    'name_font': {'size': 12, 'bold': True},
    'num_font':  {'italic': True },
})

chart.set_y_axis({
    'name': '数字',
    'name_font': {'size': 12, 'bold': True},
    'num_font':  {'italic': True },
})

worksheet.insert_chart('A7', chart)
workbook.close()

5.设置图标标题

# chart.set_title({'name': '测试图标'})
chart.set_title({
    'name': '测试图标',
    'overlay': True,
    'layout': {
        'x': 0.62,
        'y': 0.24,
    }
})
# chart.set_title({'none': True})  #关闭此默认标题同时关闭所有其他set_title()选项。

set_title()函数

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

import xlsxwriter

workbook = xlsxwriter.Workbook('data.xlsx')
worksheet = workbook.add_worksheet('数据')


chart = workbook.add_chart({'type': 'column'})
data = [
    ['A','B','C','D','E'],
    [3, 6, 9, 12, 15],
    [2, 4, 6, 8, 10],
    [1, 2, 3, 4, 5],
]

worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])
worksheet.write_column('D1', data[2])

chart.add_series(
    {'name': "系列一",
     'categories':'数据!$A$1:$A$5',
     'values': '=数据!$B$1:$B$5',
     })
chart.add_series(
    {'name': "系列二",
     'categories': '数据!$A$1:$A$5',
     'values': '=数据!$C$1:$C$5',
     })
chart.add_series(
    {'name': "系列三",
     'categories': '数据!$A$1:$A$5',
     'values': '=数据!$D$1:$D$5',
     })

chart.set_x_axis({
    'name': '字母',
    'name_font': {'size': 12, 'bold': True},
    'num_font':  {'italic': True },
})

chart.set_y_axis({
    'name': '数字',
    'name_font': {'size': 12, 'bold': True},
    'num_font':  {'italic': True },
})

# chart.set_title({'name': '测试图标'})
chart.set_title({
    'name': '测试图标',
    'overlay': True,
    'layout': {
        'x': 0.25,
        'y': 0.005,
    }
})
# chart.set_title({'none': True})  #关闭此默认标题同时关闭所有其他set_title()选项。


worksheet.insert_chart('A7', chart)
workbook.close()


留言

您的电子邮箱地址不会被公开。 必填项已用 * 标注