【Python 在Excel中画图】

Python 在Excel中画图

import openpyxl
import xlsxwriter

# 打开现有的 Excel 文件
workbook = openpyxl.load_workbook(r'C:\Users\DELL\Desktop\example.xlsx')

# 选择要复制的工作表
source_sheet = workbook['Sheet2']

# 创建一个新的 XlsxWriter 工作簿
new_workbook = xlsxwriter.Workbook(r'C:\Users\DELL\Desktop\new_file.xlsx')

# 创建一个新的工作表
worksheet = new_workbook.add_worksheet('123')
new_sheet = new_workbook.add_worksheet('Sheet2')
# 复制工作表的属性(如行高、列宽、单元格格式等)
# 这里需要手动复制,因为 XlsxWriter 不会自动复制这些属性

# 复制工作表中的数据
for row in source_sheet.iter_rows():
    for cell in row:
        # print(cell,cell.value,cell.row,cell.column)
        # if cell:
        # format = new_workbook.add_format({'font':cell.font,"border": cell.border, "fill":cell.fill, "number_format":cell.number_format,
        #                                   "protection":cell.protection, "alignment":cell.alignment})
        # 获取单元格的值
        # value = cell.value
        # if value is not None:
        #     value = value.lower()  # 转换为小写

        # 创建一个新的格式对象
        format = new_workbook.add_format({
            'bold': cell.font.bold if cell.font else False,
            'italic': cell.font.italic if cell.font else False,
            'font_name': cell.font.name if cell.font else 'Arial',
            'font_size': cell.font.size if cell.font else 11,
            'border': cell.border.top.style if cell.border and cell.border.top else 'none',
            'num_format': cell.number_format if cell.number_format else 'General'
        })
        new_sheet.write(cell.row-1, cell.column-1, cell.value, format)
        # new_sheet.write(cell.row-1, cell.column-1, cell.value)
# 创建图表对象
chart_col = new_workbook.add_chart({'type': 'line'})

# 配置图表数据系列
chart_col.add_series({
    # 这里的sheet1是默认的值,因为我们在新建sheet时没有指定sheet名
    # 如果我们新建sheet时设置了sheet名,这里就要设置成相应的值
    'name': '=Sheet2!$R$1:$R$2',
    'categories': '=Sheet2!$Q$3:$Q$306',
    'values':   '=Sheet2!$R$3:$R$306',
    'line': {'color': '#989898',
             'pattern': 'none'
             # 'width': 2  # 设置线条宽度为 2
             },
})
# 配置第二个系列数据
chart_col.add_series({
    'name': '=Sheet2!$S$1:$S$2',  # 数据名称
    'categories': '=Sheet2!$Q$3:$Q$306',  # 数据类型
    'values':   '=Sheet2!$S$3:$S$306',  # 取值范围
    'line': {'color': '#009999',
             'pattern': 'none'},  # 线条属性
})
# 设置图表的title 和 x,y轴信息
chart_col.set_title({'name': 'MT-GMV'})
chart_col.set_x_axis({'name': '',
                      'major_gridlines': {'visible': False}
                      })
chart_col.set_y_axis({'name':  '',
                      'line': {'none': True},  # 隐藏标签线
                      'minor_gridlines': {'visible': False},  # 隐藏次要网格线
                      'minor_tick_mark': 'none',  # 隐藏次要刻度标记
                      'axis_line': {'visible': False},  # 隐藏y轴轴线
                      'major_gridlines': {'visible': False},   # 隐藏网格线
                      'major_tick_mark': 'none',  # 隐藏主刻度线
                      })
# 设置图例位置,默认在右侧
chart_col.set_legend({'position': 'top'})
# 设置图表的风格
# chart_col.set_style(52)
# 设置图表的大小
chart_col.set_size({'width': 592, 'height': 382})  # 宽度为 592 像素,高度为 282

# # 设置图表的边距
# chart_col.set_chartarea({
#     'margin_left': 0,   # 左侧边距
#     'margin_right': 0,  # 右侧边距
#     'margin_top': 10,    # 顶部边距
#     'margin_bottom': 0,  # 底部边距
# })
# 设置图表的绘图区域属性,包括间距
chart_col.set_plotarea({
    'layout': {
        'x':      0.08,  # 左侧间距为图表区宽度的15%
        'y':      0.1,   # 顶部间距为图表区高度的10%
        'width':  0.9,  # 绘图区域宽度为图表区宽度的75%
        'height': 0.7    # 绘图区域高度为图表区高度的80%
    }
})

# 插入图表到工作表
worksheet.insert_chart('D4', chart_col,{'x_offset': 25, 'y_offset': 10})
# 关闭 XlsxWriter 工作簿
new_workbook.close()

python使用xlsxwriter模块在excel中画折线图(柱状图等类似)。搜了半天,xisxwriter不支持操作已有的文件,所以这一点就很坑爹。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值