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不支持操作已有的文件,所以这一点就很坑爹。