【高性能利器】XlsxWriter完全指南:15个专业技巧打造企业级Excel自动化工作流
1. XlsxWriter基础入门
1.1 安装与环境配置
使用pip安装XlsxWriter非常简单:
# 安装XlsxWriter
pip install xlsxwriter
基本导入:
import xlsxwriter
1.2 创建第一个工作簿
def create_basic_workbook():
"""创建一个基本的Excel工作簿"""
# 创建一个新的Excel文件
workbook = xlsxwriter.Workbook('hello_world.xlsx')
# 添加一个工作表
worksheet = workbook.add_worksheet('第一张表')
# 写入一些数据
worksheet.write('A1', 'Hello')
worksheet.write('B1', 'World')
# 使用行列坐标写入数据(从0开始计数)
worksheet.write(1, 0, '这是第二行第一列')
worksheet.write(1, 1, '这是第二行第二列')
# 写入数字
worksheet.write(2, 0, 123)
worksheet.write(2, 1, 456.789)
# 关闭并保存工作簿
workbook.close()
print("Excel文件已创建:hello_world.xlsx")
# 调用函数
create_basic_workbook()
1.3 写入数据的多种方式
def data_writing_examples():
"""演示XlsxWriter多种写入数据的方法"""
# 创建一个新的Excel文件
workbook = xlsxwriter.Workbook('data_writing.xlsx')
worksheet = workbook.add_worksheet()
# 1. 单个单元格写入
worksheet.write(0, 0, '单个写入')
# 2. 使用行列方法
worksheet.write_string(1, 0, '字符串') # 明确指定为字符串
worksheet.write_number(1, 1, 123.45) # 明确指定为数字
worksheet.write_formula(1, 2, '=B2*2') # 写入公式
worksheet.write_boolean(1, 3, True) # 写入布尔值
worksheet.write_url(1, 4, 'https://www.example.com', string='示例链接') # 写入链接
# 3. 写入空单元格但应用格式
blank_format = workbook.add_format({
'bg_color': '#FFFF00'})
worksheet.write_blank(2, 0, None, blank_format)
# 4. 写入日期和时间
date_format = workbook.add_format({
'num_format': 'yyyy-mm-dd'})
worksheet.write_datetime(2, 1, datetime.datetime(2023, 1, 1), date_format)
# 5. 使用write_row方法一次写入一行数据
worksheet.write_row(3, 0, ['行数据1', '行数据2', '行数据3'])
# 6. 使用write_column方法一次写入一列数据
worksheet.write_column(0, 5, ['列数据1', '列数据2', '列数据3'])
# 7. 使用更底层的方法写入多个单元格
worksheet.add_write_handler(float, lambda worksheet, row, col, number, format:
worksheet.write_number(row, col, number + 1, format))
# 现在所有浮点数都会+1后写入
worksheet.write(5, 0, 10.5) # 实际写入11.5
# 8. 写入富文本(混合格式文本)
bold = workbook.add_format({
'bold': True})
italic = workbook.add_format({
'italic': True})
red = workbook.add_format({
'color': 'red'})
worksheet.write_rich_string(6, 0,
'这段文本包含', bold, '粗体', '、',
italic, '斜体', '和',
red, '红色', '文本')
# 关闭并保存工作簿
workbook.close()
print("Excel文件已创建:data_writing.xlsx")
# 导入所需库
import datetime
# 调用函数
data_writing_examples()
2. 格式与样式设置
2.1 单元格格式设置
def cell_formatting_examples():
"""演示XlsxWriter的单元格格式设置"""
# 创建一个新的Excel文件
workbook = xlsxwriter.Workbook('cell_formatting.xlsx')
worksheet = workbook.add_worksheet()
# 为标题行添加格式
title_format = workbook.add_format({
'bold': True, # 粗体
'font_color': 'white', # 字体颜色
'bg_color': '#4F81BD', # 背景颜色
'font_size': 12, # 字体大小
'align': 'center', # 水平居中
'valign': 'vcenter', # 垂直居中
'border': 1, # 边框
'text_wrap': True # 文本自动换行
})
# 为数据单元格添加格式
data_format = workbook.add_format({
'font_name': 'Arial', # 字体名称
'font_size': 10, # 字体大小
'align': 'left', # 左对齐
'valign': 'vcenter', # 垂直居中
'border': 1, # 边框
'border_color': '#D9D9D9' # 边框颜色
})
# 为数字添加格式
number_format = workbook.add_format({
'num_format': '#,##0.00', # 数字格式(带千位分隔符和两位小数)
'align': 'right', # 右对齐
'border': 1 # 边框
})
# 为货币添加格式
currency_format = workbook.add_format({
'num_format': '"¥"#,##0.00', # 货币格式
'align': 'right', # 右对齐
'border': 1, # 边框
'font_color': 'green' # 字体颜色
})
# 为百分比添加格式
percent_format = workbook.add_format({
'num_format': '0.00%', # 百分比格式
'align': 'right', # 右对齐
'border': 1 # 边框
})
# 添加日期格式
date_format = workbook.add_format({
'num_format': 'yyyy-mm-dd', # 日期格式
'align': 'center', # 居中对齐
'border': 1 # 边框
})
# 添加条件格式(高于平均值的单元格显示为浅绿色)
above_average_format = workbook.add_format({
'bg_color': '#C6EFCE', # 背景颜色
'font_color': '#006100', # 字体颜色
'border': 1 # 边框
})
# 写入标题行
headers = ['产品名称', '单价', '销售数量', '销售额', '毛利率', '销售日期']
worksheet.write_row(0, 0, headers, title_format)
# 调整行高
worksheet.set_row(0, 20) # 设置第一行高度为20
# 调整列宽
worksheet.set_column('A:A', 20) # 设置A列宽度为20
worksheet.set_column('B:B', 10) # 设置B列宽度为10
worksheet.set_column('C:C', 12) # 设置C列宽度为12
worksheet.set_column('D:D', 15) # 设置D列宽度为15
worksheet.set_column('E:E', 10) # 设置E列宽度为10
worksheet.set_column('F:F', 15) # 设置F列宽度为15
# 写入示例数据
data = [
['笔记本电脑', 5999.00, 10, '=B2*C2', '=D2/B2*0.3', datetime.datetime(2023, 1, 15)],
['智能手机', 3999.00, 25, '=B3*C3', '=D3/B3*0.4', datetime.datetime(2023, 1, 20)],
['平板电脑', 2999.00, 15, '=B4*C4', '=D4/B4*0.35', datetime.datetime(2023, 1, 25)],
['智能手表', 1999.00, 20, '=B5*C5', '=D5/B5*0.45', datetime.datetime(2023, 1, 30)],
['无线耳机', 999.00, 30, '=B6*C6', '=D6/B6*0.5', datetime.datetime(2023, 2, 5)]
]
# 写入数据并应用格式
for row_num, row_data in enumerate(data):
worksheet.write(row_num + 1, 0, row_data[0], data_format) # 产品名称
worksheet.write(row_num + 1, 1, row_data[1], number_format) # 单价
worksheet.write(row_num + 1, 2, row_data[2], data_format) # 销售数量
worksheet.write_formula(row_num + 1, 3, row_data[3], currency_format) # 销售额
worksheet.write_formula(row_num + 1, 4, row_data[4], percent_format) # 毛利率
worksheet.write(row_num + 1, 5, row_data[5], date_format) # 销售日期
# 应用条件格式:突出显示高于平均销售额的产品
worksheet.conditional_format('D2:D6', {
'type': 'average',
'criteria': 'above',
'format': above_average_format
})
# 关闭并保存工作簿
workbook.close()
print("Excel文件已创建:cell_formatting.xlsx")
# 调用函数
cell_formatting_examples()
2.2 创建自定义格式
def custom_formats_example():
"""演示如何创建和使用自定义格式"""
# 创建一个新的Excel文件
workbook = xlsxwriter.Workbook('custom_formats.xlsx')
worksheet = workbook.add_worksheet()
# 写入标题行
worksheet.write('A1', '自定义格式示例')
# 1. 创建渐变填充格式
gradient_format = workbook.add_format({
'gradient': {
'colors': ['#FFFFFF', '#3366FF'], 'type': 'linear', 'direction': 3},
'border': 1,
'align': 'center',
'valign': 'vcenter'
})
# 2. 创建双边框格式
double_border_format = workbook.add_format({
'border': 2,
'border_color': 'red',
'align': 'center'
})
# 3. 创建斜线填充格式
pattern_format = workbook.add_format({
'pattern': 1, # 轻细斜线填充
'bg_color': '#C0C0C0',
'fg_color': '#FF0000',
'border': 1
})
# 4. 创建自定义数字格式
custom_number_format = workbook.add_format({
'num_format': '[Blue]#,##0.00;[Red]-#,##0.00', # 正数蓝色,负数红色
'border': 1
})
# 5. 创建旋转文本格式
rotated_text_format = workbook.add_format({
'rotation': 45, # 文本旋转45度
'border': 1,
'align': 'center',
'valign': 'vcenter'
})
# 6. 创建缩进文本格式
indent_format = workbook.add_format({
'indent': 2, # 缩进2级
'border': 1
})
# 7. 创建带有图案填充的格式
checker_format = workbook.add_format({
'pattern': 2, # 棋盘格图案
'bg_color': '#FFFF00',
'fg_color': '#FF0000',
'border': 1
})
# 8. 创建自定义文本格式(显示银行账号)
account_format = workbook.add_format({
'num_format': '0000-0000-0000-0000',
'align': 'center',
'border': 1
})
# 应用格式到单元格
worksheet.write('A3', '渐变填充', gradient_format)
worksheet.write('A4', '双边框', double_border_format)
worksheet.write('A5', '斜线填充', pattern_format)
worksheet.write('A6', 1234.56, custom_number_format)
worksheet.write('A7', -1234.56, custom_number_format)
worksheet.write('A8', '旋转文本', rotated_text_format)
worksheet.write('A9', '缩进文本', indent_format)
worksheet.write('A10', '棋盘格图案', checker_format)
worksheet.write('A11', 1234567812345678, account_format)
# 调整列宽
worksheet.set_column('A:A', 25)
# 调整行高
for row in range(3, 12):
worksheet.set_row(row, 30)
# 关闭并保存工作簿
workbook.close()
print("Excel文件已创建:custom_formats.xlsx")
# 调用函数
custom_formats_example()
2.3 合并单元格与对齐
def merge_and_align_example():
"""演示单元格合并与对齐的高级应用"""
# 创建一个新的Excel文件
workbook = xlsxwriter.Workbook('merge_and_align.xlsx')
worksheet = workbook.add_worksheet()
# 1. 标题合并与格式设置
title_format = workbook.add_format({
'bold': True,
'font_size': 16,
'align': 'center',
'valign': 'vcenter',
'border': 2,
'bg_color': '#4472C4',
'font_color': 'white'
})
# 合并A1:E1单元格并添加标题
worksheet.merge_range('A1:E1', '季度销售报表', title_format)
# 2. 子标题合并与格式设置
subtitle_format = workbook.add_format({
'bold': True,
'font_size': 12,
'align': 'center',
'valign': 'vcenter',
'bg_color': '#D9E1F2',
'border': 1
})
# 合并A2:E2单元格并添加子标题
worksheet.merge_range('A2:E2', '2023年第一季度', subtitle_format)
# 3. 创建分类标题格式
header_format = workbook.add_format({
'bold': True,
'align': 'center',
'valign': 'vcenter',
'bg_color': '#D9D9D9',
'border': 1
})
# 列标题
column_headers = ['产品类别', '1月', '2月', '3月', '季度总计']
for col, header in enumerate(column_headers):
worksheet.write(3, col, header, header_format)
# 4. 合并同类产品单元格,创建分组效果
category_format = workbook.add_format({
'align': 'left',
'valign': 'vcenter',
'bg_color': '#F2F2F2',
'border': 1
})
# 合并类别单元格
worksheet.merge_range('A5:A7', '电子产品', category_format)
worksheet.merge_range('A9:A11', '办公用品', category_format)
worksheet.merge_range('A13:A15', '家居产品', category_format)
# 5. 数据单元格格式
data_format = workbook.add_format({
'num_format': '#,##0',
'align': 'right',
'border': 1
})
# 合计单元格格式
total_format = workbook.add_format({
'num_format': '#,##0',
'align': 'right',
'border': 1,
'bold': True,
'bg_color': '#E2EFDA'
})
# 6. 添加示例数据
data = [
# 电子产品
['笔记本电脑', 45000, 52000, 48000],
['智能手机', 36000, 42000, 38000],
['平板电脑', 22000, 25000, 24000],
# 办公用品
['打印机', 18000, 16500, 19000],
['办公桌椅', 12000, 13500, 15000],
['文具套装', 8500, 9200, 8800],
# 家居产品
['沙发', 35000, 28000, 32000],
['床垫', 24000, 26000, 27000],
['厨具套装', 19500, 21000, 20500]
]
# 写入产品数据
product_rows = [5, 6, 7, 9, 10, 11, 13, 14, 15]
for i, row_num in enumerate(product_rows):
worksheet.write(row_num, 1, data[i][0], workbook.add_format({
'border': 1})) # 产品名称
# 写入月度销售数据
for col in range(1, 4):
worksheet.write(row_num, col + 1, data[i][col], data_format)
# 计算季度总计
worksheet.write_formula(row_num, 4, f'=SUM(C{
row_num+1}:E{
row_num+1})', total_format)
# 7. 添加类别小计
subtotal_format = workbook.add_format({
'bold': True,
'num_format': '#,##0',
'align': 'right',
'border': 1,
'bg_color': '#D9E1F2'
})
# 电子产品小计
worksheet.merge_range('A8:B8', '电子产品小计', subtotal_format)
worksheet.write_formula(7, 2, '=SUM(C5:C7)', subtotal_format) # 1月
worksheet.write_formula(7, 3, '=SUM(D5:D7)', subtotal_format) # 2月
worksheet.write_formula(7, 4, '=SUM(E5:E7)', subtotal_format) # 3月
worksheet.write_formula(7, 4, '=SUM(F5:F7)', subtotal_format) # 季度总计
# 办公用品小计
worksheet.merge_range('A12:B12', '办公用品小计', subtotal_format)
worksheet.write_formula(11, 2, '=SUM(C9:C11)', subtotal_format) # 1月
worksheet.write_formula(11, 3, '=SUM(D9:D11)', subtotal_format) # 2月
worksheet.write_formula(11, 4, '=SUM(E9:E11)', subtotal_format) # 3月
worksheet.write_formula(11, 4, '=SUM(F9:F11)', subtotal_format) # 季度总计
# 家居产品小计
worksheet.merge_range('A16:B16', '家居产品小计', subtotal_format)
worksheet.write_formula(15, 2, '=SUM(C13:C15)', subtotal_format) # 1月
worksheet.write_formula(15, 3, '=SUM(D13:D15)', subtotal_format) # 2月
worksheet.write_formula(15, 4, '=SUM(E13:E15)', subtotal_format) # 3月
worksheet.write_formula(15, 4, '=SUM(F13:F15)', subtotal_format) # 季度总计
# 8. 添加总计行
grand_total_format = workbook.add_format({
'bold': True,
'font_size': 12,
'num_format': '#,##0',
'align': 'right',
'border': 2,
'bg_color': '#8EA9DB',
'font_color': 'white'
})
# 合计行
worksheet.merge_range('A18:B18', '总计', grand_total_format)
worksheet.write_formula(17, 2, '=SUM(C8,C12,C16)', grand_total_format) # 1月
worksheet.write_formula(17, 3, '=SUM(D8,D12,D16)', grand_total_format) # 2月
worksheet.write_formula(17, 4, '=SUM(E8,E12,E16)', grand_total_format) # 3月
worksheet.write_formula(17, 4, '=SUM(F8,F12,F16)', grand_total_format) # 季度总计
# 调整列宽
worksheet.set_column('A:A', 15)
worksheet.set_column('B:B', 20)
worksheet.set_column('C:F', 12)
# 调整行高
worksheet.set_row(0, 30) # 标题行
worksheet.set_row(1, 25) # 子标题行
worksheet.set_row(17, 25) # 合计行
# 关闭并保存工作簿
workbook.close()
print("Excel文件已创建:merge_and_align.xlsx")
# 调用函数
merge_and_align_example()
3. 图表与数据可视化
3.1 基本图表创建
def basic_charts_example():
"""创建各种基本图表"""
# 创建一个新的Excel文件
workbook = xlsxwriter.Workbook('basic_charts.xlsx')
worksheet = workbook.add_worksheet()
# 添加标题
bold = workbook.add_format({
'bold': True})
worksheet.write('A1', '季度销售数据', bold)
# 添加数据
headings = ['季度', '北区', '南区', '东区', '西区']
data = [
['Q1', 8000, 7000, 6000, 9000],
['Q2', 9500, 8500, 7500, 8500],
['Q3', 10000, 9500, 8000, 9800],
['Q4', 12000, 11000, 9500, 11500],
]
worksheet.write_row('A3', headings, bold)
for row_num, row_data in enumerate(data):
worksheet.write_row(row_num + 3, 0, row_data)
# 1. 创建柱状图
column_chart = workbook.add_chart({
'type': 'column'})
# 配置数据系列
for col_num in range(1, 5):
column_chart.add_series({
'name': ['Sheet1', 2, col_num],
'categories': ['Sheet1', 3, 0, 6, 0],
'values': ['Sheet1', 3, col_num, 6, col_num],
})
# 设置图表标题和坐标轴标题
column_chart.set_title({
'name': '季度销售数据 - 柱状图'})
column_chart.set_x_axis({
'name': '季度'})
column_chart.set_y_axis({
'name': '销售额'})
# 设置图表样式
column_chart.set_style(11)
# 插入图表到工作表
worksheet.insert_chart('A10', column_chart, {
'x_offset': 25, 'y_offset': 10})
# 2. 创建折线图
line_chart = workbook.add_chart({
'type': 'line'})
# 配置数据系列
for col_num in range(1, 5):
line_chart.add_series({
'name': ['Sheet1', 2, col_num],
'categories': ['Sheet1', 3, 0, 6, 0],
'values': ['Sheet1', 3, col_num, 6, col_num],
'marker': {
'type': 'automatic'}, # 添加数据点标记
'data_labels': {
'value': True}, # 显示数据标签
})
# 设置图表标题和坐标轴标题
line_chart.set_title({
'name': '季度销售数据 - 折线图'})
line_chart.set_x_axis({
'name': '季度'})
line_chart.set_y_axis({
'name': '销售额'})
# 设置图表样式
line_chart.set_style(12)
# 插入图表到工作表
worksheet.insert_chart('I10', line_chart, {
'x_offset': 25, 'y_offset': 10})
# 3. 创建饼图
pie_chart = workbook.add_chart({
'type': 'pie'})
# 配置数据系列 - 仅使用第四季度的数据
pie_chart.add_series({
'name': '第四季度',
'categories': ['Sheet1', 2, 1, 2, 4],
'values': ['Sheet1', 6, 1, 6, 4],
'data_labels': {
'percentage': True}, # 显示百分比
})
# 设置图表标题
pie_chart.set_title({
'name': '第四季度各区域销售比例'})
# 设置图表样式
pie_chart.set_style(10)
# 插入图表到工作表
worksheet.insert_chart('A27', pie_chart, {
'x_offset': 25, 'y_offset': 10})
# 4. 创建面积图
area_chart = workbook.add_chart({
'type': 'area'})
# 配置数据系列
for col_num in range(1, 5):
area_chart.add_series({
'name': ['Sheet1', 2, col_num],
'categories': ['Sheet1', 3, 0, 6, 0],
'values': ['Sheet1', 3, col_num, 6, col_num],
})
# 设置图表标题和坐标轴标题
area_chart.set_title({
'name': '季度销售数据 - 面积图'})
area_chart.set_x_axis({
'name': '季度'})
area_chart.set_y_axis({
'name': '销售额'})
# 设置图表样式
area_chart.set_style(13)
# 插入图表到工作表
worksheet.insert_chart('I27', area_chart, {
'x_offset': 25, 'y_offset': 10})
# 关闭并保存工作簿
workbook.close()
print("Excel文件已创建:basic_charts.xlsx")
# 调用函数
basic_charts_example()
3.2 高级图表定制
def advanced_charts_example():
"""创建高级定制图表"""
# 创建一个新的Excel文件
workbook = xlsxwriter.Workbook('advanced_charts.xlsx')
worksheet = workbook.add_worksheet()
# 添加标题
bold = workbook.add_format({
'bold': True})
worksheet.write('A1', '月度销售与利润分析', bold)
# 添加数据
months = ['一月', '二月', '三月', '四月', '五月', '六月']
sales_data = [8500, 9200, 9800, 8800, 10500, 11200]
profit_data = [2300, 2500, 2800, 2400, 3100, 3400]
profit_margin = [0.27, 0.27, 0.29, 0.27, 0.30, 0.30]
# 写入数据
worksheet.write_column('A4', ['月份'] + months)
worksheet.write_column('B4', ['销售额'] + sales_data)
worksheet.write_column('C4', ['利润'] + profit_data)
worksheet.write_column('D4', ['利润率'] + profit_margin)
# 1. 创建组合图表(柱状图+折线图)
combo_chart = workbook.add_chart({
'type': 'column'})
# 添加销售额柱状图系列
combo_chart.add_series({
'name': '销售额',
'categories': ['Sheet1', 4, 0, 9, 0],
'values': ['Sheet1', 4, 1, 9, 1],
'data_labels': {
'value': True},
'gap': 50, # 设置柱子之间的间隙
})
# 添加利润柱状图系列
combo_chart.add_series({
'name': '利润',
'categories': ['Sheet1', 4, 0, 9, 0],
'values': ['Sheet1', 4, 2, 9, 2],
'data_labels': {
'value': True},
'gap': 50,
'overlap': -10, # 负值使柱子并排显示
})
# 添加利润率折线图系列(使用第二个Y轴)
line_series = {
'name': '利润率',
'categories': ['Sheet1', 4, 0, 9, 0],
'values': ['Sheet1', 4, 3, 9, 3],
'marker': {
'type': 'diamond', 'size': 7},
'line': {
'width': 2},
'data_labels': {
'value': True, 'num_format': '0.0%'},
'y2_axis': True, # 使用第二个Y轴
}
# 创建第二个Y轴
combo_chart.set_y2_axis({
'name': '利润率',
'num_format': '0%',
})
# 添加折线图系列
combo_chart.add_series(line_series)
# 设置图表标题和坐标轴标题
combo_chart.set_title({
'name': '销售额、利润和利润率分析',
'name_font': {
'size': 14, 'bold': True},
})
combo_chart.set_x_axis({
'name': '月份',
'name_font': {
'bold': True},
'num_font': {
'italic': True},
})
combo_chart.set_y_axis({
'name': '金额',
'name_font': {
'bold': True},
'num_format': '#,##0',
'major_gridlines': {
'visible': True, 'line': {
'width': 0.5, 'dash_type': 'dash'}},
})
# 设置图表图例
combo_chart.set_legend({
'position': 'bottom',
'font': {
'bold': True},
})
# 设置图表大小
combo_chart.set_size({
'width': 720, 'height': 400})
# 设置绘图区边框
combo_chart.set_plotarea({
'border': {
'color': 'black', 'width': 1.25},
'fill': {
'color': '#F2F2F2'},
})
# 插入图表到工作表
worksheet.insert_chart('F4', combo_chart)
# 2. 创建瀑布图(使用堆叠柱状图模拟)
# 创建辅助数据
worksheet.write('G4', '收入分析')
items = ['起始金额', '产品销售', '服务收入', '退款', '折扣', '运营成本', '税费', '最终利润']
values = [0, 15000, 8500, -3000, -1200, -7500, -3100, 0] # 最后的0是占位符
# 计算运行总和
running_total = 0
invisible_values = []
visible_values = []
for val in values[:-1]: # 除了最后一项
if val >= 0:
invisible_values.append(running_total)
visible_values.append(val)
else:
invisible_values.append(running_total + val)
visible_values.append(abs(val))
running_total += val
# 添加最终余额
invisible_values.append(0)
visible_values.append(running_total)
# 写入数据
worksheet.write_column('G6', items)
worksheet.write_column('H6', invisible_values)
worksheet.write_column('I6', visible_values)
worksheet.write_column('J6', [running_total for _ in range(len(items))]) # 总计
# 创建瀑布图
waterfall_chart = workbook.add_chart({
'type': 'column', 'subtype': 'stacked'})
# 添加不可见系列(作为基础)
waterfall_chart.add_series({
'name': '基础',
'categories': ['Sheet1', 5, 6, 12, 6],
'values': ['Sheet1', 5, 7, 12, 7],
'fill': {
'none': True},
'border': {
'none': True},
'data_labels': {
'none': True},
})
# 添加可见系列(正值)
waterfall_chart.add_series({
'name': '增加',
'categories': ['Sheet1', 5, 6, 12, 6],
'values': ['Sheet1', 5, 8, 12, 8],
'fill': {
'color': '#91CC75'},
'data_labels': {
'value': True, 'num_format': '#,##0', 'position': 'inside'},
})
# 设置最后一个元素(合计)的颜色
format_waterfall_total = workbook.add_format({
'bg_color': '#5470C6'})
worksheet.write('I13', visible_values[-1], format_waterfall_total)
# 设置图表标题和坐标轴
waterfall_chart.set_title({
'name': '收入分析瀑布图'})
waterfall_chart.set_x_axis({
'name': '项目'})
waterfall_chart.set_y_axis({
'name': '金额', 'num_format': '#,##0'})
# 关闭图例
waterfall_chart.set_legend({
'none': True})
# 设置图表大小
waterfall_chart.set_size({
'width': 720, 'height': 400})
# 插入图表到工作表
worksheet.insert_chart('F20', waterfall_chart)
# 关闭并保存工作簿
workbook.close()
print("Excel文件已创建:advanced_charts.xlsx")
# 调用函数
advanced_charts_example()
3.3 数据标签与图例定制
def custom_chart_labels_example():
"""自定义图表数据标签与图例"""
# 创建一个新的Excel文件
workbook = xlsxwriter.Workbook('custom_chart_labels.xlsx')
worksheet = workbook.add_worksheet()
# 添加数据
regions = ['北部', '南部', '东部', '西部', '中部']
q1_data = [8200, 7800, 6700, 9100, 8400]
q2_data = [8900, 8100, 7200, 9500, 8700]
q3_data = [9500, 8600, 7800, 10000, 9100]
q4_data = [10200, 9400, 8500, 11200, 9800]
# 写入数据
worksheet.write_column('A2', ['区域'] + regions)
worksheet.write_column('B2', ['第一季度'] + q1_data)
worksheet.write_column('C2', ['第二季度'] + q2_data)
worksheet.write_column('D2', ['第三季度'] + q3_data)
worksheet.write_column('E2', ['第四季度'] + q4_data)
# 1. 创建自定义数据标签的柱状图
column_chart = workbook.add_chart({
'type': 'column'})
# 配置数据系列
for col_num, quarter in enumerate(['第一季度', '第二季度', '第三季度', '第四季度'], 1):
column_chart.add_series({
'name': quarter,
'categories': ['Sheet1', 2, 0, 6, 0],
'values': ['Sheet1', 2, col_num, 6, col_num],
'data_labels': {
'value': True, # 显示值
'category': False, # 不显示类别
'series_name': False, # 不显示系列名
'position': 'inside_end', # 标签位置
'font': {