【python学习笔记】openpyxl操作excel高阶操作


path = os.path.join(os.getcwd(), '项目1', '问题单总体汇总.xlsx')
wb = openpyxl.load_workbook(path, data_only=True)  # 增加data_only=True参数,读取单元格的内容不会显示为公式
ws = wb.active
'插入公式'
ws['B82'] = '=sum(B2:B81)'
print(ws['B82'].value)  # 公式计算成功后要保存一次excel文件,要不然读取的为None,保存一次重新运行获取正常24548

'''设置行高列宽'''
ws.row_dimensions[1].height = 30  # 行高1个数值表示1/72英寸,大约0.35mm  注意行为数字而非字符串
ws.column_dimensions['A'].width = 70 # 列宽1个数值表示一个字符大小

'''合并和拆分单元格'''
ws.merge_cells('C2:D2')
ws['C2'] = '合并'
ws.unmerge_cells('C2:D2')

'''冻结窗口:冻结对应单元格上一行和左边一列'''
ws.freeze_panes = 'A2'  # 冻结首行 两条命令后覆盖
ws.freeze_panes = 'B1'  # 冻结首列
ws.freeze_panes = 'B2'  # 冻结首行首列 注意没有解冻

'''创建图表 柱状图'''
'''创建图表的步骤:
1、读取数据
2、创建如表对象
3、将数据添加到图表
4、将图表添加到对应的表里面'''
maxCol = openpyxl.utils.column_index_from_string('J')
minCol = openpyxl.utils.column_index_from_string('D')
values = openpyxl.chart.Reference(ws, min_row=4, min_col=5, max_col=maxCol, max_row=18) # 引用工作表的单元范围,用作图表添加数据
labels = openpyxl.chart.Reference(ws, min_row=5, min_col=minCol, max_row=18) # 引用工作表的单元范围,用作X轴标签使用
# chart = openpyxl.chart.BarChart3D() # 柱状3D图
chart = openpyxl.chart.BarChart() # 柱状图
chart.title = '异常问题单分布情况'
# chart.y_axis.title = '异常问题数量'  # 设置y轴标题
# chart.x_axis.title = '组件' # 设置x轴标题
# chart.legend = None  #取消图表图例
chart.add_data(values, titles_from_data=True) # 图表添加一个范围数据,每个列视为一个数据系列
chart.set_categories(labels) # 图表设置类别,X轴标签
# chart.style = 13 # 图标样式 绿色
chart.grouping = "stacked"  # 堆积
# chart.shape = 4
# chart.grouping = "percentStacked"
# chart.type = "col"  # 定义垂直条形图 默认值
# chart.type = "bar"  # 定义水平条形图
chart.overlap = 100  # 层叠图时需要设置重叠为100 来定义使用堆叠图表
ws.add_chart(chart, 'D21') # 在表中的D21位置插入图表
wb.save(path)   # 生成excel文件

相关