Python操作Excel合并单元格
时间:2022-07-24
本文章向大家介绍Python操作Excel合并单元格,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
每门编程语言都会遇到操作Excel!本文主要说下Python对Excel操作时合并单元格的情况。
目录
1.效果图
2.用到的方法
3.完整代码
1
效果图
2
用到的方法
Python中操作Excel的库有很多,本次使用 xlsxwriter 来进行写Excel操作。Python版本 3.6。
xlsxwriter 可直接 pip 安装。新建一个Excel,里面可包含多个sheet ,程序中要对具体工作sheet进行操作,这个就像在windows下操作Excel一样。
add_worksheet 添加一个sheet
add_format 添加一个样式,比如 居中,居左等
write 写一行数据
merge_range('A1:A7') 合并单元格,A2-A7
set_column 设置列的宽度等
3
完整代码
import os
import xlsxwriter
def get_history():
# write excel,construct dict
filename = '333.xlsx'
# 删除结果文件
if (os.path.isfile(filename)):
os.remove(filename)
list = {}
# 注意 python字典里面不能再嵌入字典!
list['name1'] = []
list['name1'].append({
'title': 'title-1-1',
'comments': [{'content': 'comments-name-1-1', 'created_at': '2020-04-13 12:17:10'},{'content': 'comments-name-1-2', 'created_at': '2020-04-13 12:17:10'}]
}
)
list['name1'].append({
'title': 'title-1-2',
'comments': [{'content': 'comments-name-1-2', 'created_at': '2020-04-13 12:17:10'},
{'content': 'comments-name-1-3', 'created_at': '2020-04-13 12:17:10'}]
}
)
list['name2'] = []
list['name2'].append(
{
'title':'title-2-1',
'comments':[{'content':'comments-name-2-1','created_at':'2020-04-13 12:17:10'},{'content':'comments-name-2-2','created_at':'2020-04-13 12:17:10'},{'content':'comments-name-2-3','created_at':'2020-04-13 12:17:10'}]
}
)
list['name3'] = []
list['name3'].append(
{
'title': 'title-3-1',
'comments': [{'content': 'comments-name-3-1', 'created_at': '2020-04-13 12:17:10'}]
}
)
write_to_excel(filename,list)
def write_to_excel(output,list):
workbook = xlsxwriter.Workbook(output)
# define sheet name
sheetName = 'History and Comment'
worksheet_s = workbook.add_worksheet(sheetName)
# 为单元格设置样式
header = workbook.add_format({
'bg_color': '#F7F7F7',
'color': 'black',
'align': 'center',
'valign': 'top',
'border': 1
})
merge_format = workbook.add_format({
'bold': True,
'border': 6,
'align': 'center', # 水平居中
'valign': 'vcenter', # 垂直居中
'fg_color': '#D7E4BC', # 颜色填充
})
bold_cell = workbook.add_format({
'bold': True,
'align': 'left',
'valign': 'top',
'text_wrap': True,
'border': 1
})
cell = workbook.add_format({
'align': 'left',
'valign': 'top',
'text_wrap': True,
'border': 1
})
# 以下为其他几种样式
bold_header = workbook.add_format({
'bold': True,
'bg_color': '#F7F7F7',
'color': 'black',
'align': 'center',
'valign': 'top',
'border': 1
})
cell_center = workbook.add_format({
'align': 'center',
'valign': 'top',
'border': 1
})
title = workbook.add_format({
'bold': True,
'font_size': 14,
'align': 'center',
'valign': 'vcenter'
})
# 标题
header_define = ['Name', 'Titile', 'Commit Date','Comments']
for i in range(0, len(header_define)):
worksheet_s.write(0, i, header_define[i], header)
a_col_width = 50
b_col_width = 50
c_col_width = 50
d_col_width = 50
# add data into the table
data_row = 1
data_row_2 = 1
data_row_1 = 1
for one_name in list.keys():
#先写 第 3,4 列
for one_history in list[one_name]:
print(one_history)
for one_comment in one_history['comments']:
worksheet_s.write_string(data_row, 2, one_comment['created_at'], bold_cell)
worksheet_s.write_string(data_row, 3, one_comment['content'], cell)
data_row = data_row+1
#写第二列
historys_len = len(one_history['comments'])
if historys_len == 1:
worksheet_s.write_string(data_row_2, 1, one_history['title'], bold_cell)
data_row_2 = data_row_2 + 1
else:
print('B'+str(data_row_2)+':B'+str(data_row_2+historys_len))
worksheet_s.merge_range('B'+str(data_row_2+1)+':B'+str(data_row_2+historys_len), one_history['title'], merge_format)
data_row_2 = data_row_2+historys_len
# 写第一列
if data_row_2 - data_row_1 == 1:
worksheet_s.write_string(data_row_1, 0, one_name, bold_cell)
else:
worksheet_s.merge_range('A' + str(data_row_1 + 1) + ':A' + str(data_row_2),one_name, merge_format)
data_row_1 = data_row_2
worksheet_s.set_column('A:A', a_col_width)
worksheet_s.set_column('B:B', b_col_width)
worksheet_s.set_column('C:C', c_col_width)
worksheet_s.set_column('D:D', d_col_width)
workbook.close()
#xlsx_data = output.getvalue()
#return xlsx_data
def test():
excle1 = xlsxwriter.Workbook("test.xlsx")
worksheet = excle1.add_worksheet()
worksheet.write("A1", "hello world")
excle1.close()
if __name__ == '__main__':
get_history()
END
- ASP.NET SignalR 2.0入门指南介绍SignalRSignalR和WebSocket传输和回滚HTML5 传输协议Comet transports传输协议选择过程监测传输指定传输协议连接
- ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用Grunt和Gulp使用Grunt准备项目配置NPM配置Grunt集成起来监测文件变化与V
- 有趣的算法(三)——Hash算法
- JavaScript中的数据类型
- Logistic回归算法及Python实现
- <script>元素在XHTML中的用法
- 有趣的算法(四)——一致性Hash算法模拟redis集群
- ASP.NET5 中静态文件的各种使用方式服务端的静态文件开启目录浏览呈现默认文件使用UseFileServer方法文件类型基于IIS的考虑最佳实践
- 使用ASP.NET Identity以手机短信实现双重验证创建一个ASP.NET 5项目运行应用程序使用SMS短信进行双重验证开启双重验证使用双重验证登陆应用程序禁用账户来防止暴力破解
- ASP.NET 5 之 错误诊断和它的中间件们配置错误处理页面在Development阶段使用错误页面运行时信息页面欢迎页面
- 有趣的算法(五) ——Dijkstra双栈四则运算
- CSS深入理解学习笔记之float
- 轻松初探 Python 篇(五)—dict 和 set 知识汇总
- 全面解析C#中的异步编程为什么要异步过去糟糕的体验一个新的方式Tasks基于任务的异步编程模型Async和await时间处理程序和无返回值的异步方法结束语
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- c++实例之通讯录管理系统之清空联系人功能(七)
- springboot任务之定时任务
- springboot检索之整合elasticsearch并使用jest操作
- springboot任务之邮件任务
- springboot安全之整合spring security实现(只有登录才有权限、不同用户显示不同内容、记住我)
- springboot任务之异步任务
- springboot缓存之@Cacheable中常用参数
- springboot开发之添加员工
- springboot分布式之整合zookeeper和dubbo
- springboot之热部署
- c++之内存模型
- springboot消息之AmqpAdmin管理组件的使用
- springtboot缓存之@CacheEvict
- vscode下搭建vue.js开发环境(基于最新的@Vue/cli 4.2.2)
- Unrecognised tag: 'snapshotPolicy'