当前位置:网站首页>openpyxl 单元格合并
openpyxl 单元格合并
2022-08-02 08:15:00 【皮卡大人】
需求:生成一个excel文件,但是表头有许多内容需要合并单元格,那个表头的内容又相当多。于是就自己写了一个方法,方便写入表头。

from openpyxl.workbook import Workbook
from openpyxl.writer.excel import ExcelWriter
from openpyxl.reader.excel import load_workbook
from openpyxl.styles import Alignment
from zipfile import ZipFile, ZIP_DEFLATED
def write_hear(ws, hear, start_row, end_row, i):
""" 写入表头 :param ws: worksheet :param hear: 表头 :param start_row: 开始-行 :param end_row: 结束-行 :param i: 列 :return: 无 """
alignment_center = Alignment(horizontal='center', vertical='center')
for item in hear:
if width := item.get('width'):
ws.merge_cells(start_row=start_row, start_column=i, end_row=start_row, end_column=i + width - 1)
ws.cell(row=start_row, column=i, value=item['label']).alignment = alignment_center
write_hear(ws, item['children'], start_row+1, end_row, i)
i = i + width
else:
ws.merge_cells(start_row=start_row, start_column=i, end_row=end_row, end_column=i)
ws.cell(row=start_row, column=i, value=item['label']).alignment = alignment_center
i = i + 1
def write_data(ws, start_row, records):
""" 数据写入表格 :param ws: :param start_row: :param records: 内容数据,二维数组[][] :return: 无 """
i = start_row + 1
for record in records:
for x in range(1, len(record) + 1):
ws.cell(i, x, record[x-1])
i += 1
def write_excel_new(hear, hear_row, records, sheet_name='Sheet1', save_excel_name='save.xlsx'):
""" 生成xlsx文件 :param hear: 表头内容 :param hear_row: 表头占的行数 :param records: 内容 :param sheet_name: 标题 :param save_excel_name: 文件名 :return: 无 """
wb = Workbook()
archive = ZipFile(save_excel_name, 'w', ZIP_DEFLATED)
ew = ExcelWriter(workbook=wb, archive=archive)
ws = wb.worksheets[0]
ws.title = sheet_name
ws.column_dimensions.width = 20
write_hear(ws, hear, 1, hear_row, 1)
# write_data(ws, hear_row, records)
ew.save()
hear_ = [
{
'label': '所属班组'},
{
'label': '电压等级(kV)'},
{
'label': '线路名称'},
{
'label': '出线站'},
{
'label': '进线站'},
{
'label': '调度编号'},
{
'label': '色标'},
{
'label': '线路长度(km)', 'width': 5,
'children': [
{
'label': '单回路'},
{
'label': '双回路'},
{
'label': '三回路'},
{
'label': '四回路及以上'},
{
'label': '总长度'}
]
},
{
'label': '杆塔数量(基)', 'width': 7,
'children': [
{
'label': '水泥杆'},
{
'label': '铁塔', 'width': 3,
'children': [
{
'label': '钢管杆'},
{
'label': '角钢塔'},
{
'label': '钢管组合塔'},
]
},
{
'label': '直线'},
{
'label': '耐张'},
{
'label': '总数'},
]
},
{
'label': '杆塔物理数量统计(基)', 'width': 4,
'children': [
{
'label': '单回路'},
{
'label': '双回路'},
{
'label': '三回路'},
{
'label': '四回路及以上'}
]
},
{
'label': '导地线型号', 'width': 3,
'children': [
{
'label': '导线型号'},
{
'label': '地线型号', 'width': 2,
'children': [
{
'label': '左地线'},
{
'label': '右地线'},
]
}
]
},
{
'label': '投产日期'},
{
'label': '备注'},
{
'label': '有无摄像头'}
]
if __name__ == '__main__':
write_excel_new(hear_, 3, None)
hear_:是我定义的一个表头字典。
write_hear:把**hear_**字典生成表头,至于行宽什么的看着设置。
write_data:写入数据,在上面的代码里,我注释掉了,所以传Node。
要是还有什么需求,可以找官网第三方库openpyxl 的官网
边栏推荐
猜你喜欢
随机推荐
Redisson的看门狗机制
第3周学习:ResNet+ResNeXt
What is the function of the import command of the page directive in JSP?
redis-desktop-manager下载安装
A young man with strong blood and energy actually became a housekeeper. How did he successfully turn around and change careers?
工程师如何对待开源 --- 一个老工程师的肺腑之言
下一个排列
PyCharm使用教程(详细版 - 图文结合)
PyCharm usage tutorial (more detailed, picture + text)
IO process thread -> process -> day4
Codeforces Round #811 (Div. 3)无DF
HCIP9_BGP增加实验
小说里的编程 【连载之二十一】元宇宙里月亮弯弯
EPSANet: An Efficient Pyramid Split Attention Block on Convolutional Neural Network
In a recent build figure SLAM, and locate the progress
day_05模块
Analysis of software testing technology How far is Turing test from us
知识点滴 - 为什么一般不用铜锅做菜
Biotin-EDA|CAS:111790-37-5| 乙二胺生物素
Biotin-C6-amine|N-生物素基-1,6-己二胺|CAS:65953-56-2








