Python如何生成excel栏位宽度可自适应内容长度
发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,这篇文章给大家分享的是有关Python如何生成excel栏位宽度可自适应内容长度的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。xlwt工具使用,生成excel栏位宽度可自适
千家信息网最后更新 2024年12月13日Python如何生成excel栏位宽度可自适应内容长度
这篇文章给大家分享的是有关Python如何生成excel栏位宽度可自适应内容长度的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
xlwt工具使用,生成excel栏位宽度可自适应内容长度
import xlwtresult = [ ['姓名', '性别', '年龄'], ['张三11111111111111111', '男', 186], ['李四', '男', 18], ['小花', '女', 16], ['梅梅', '女', 14], ] total = [ ['男(人)', '女(人)', '共(人)'], [2, 2, 4], ] # 获取字符串长度,一个中文的长度为2def len_byte(value): length = len(value) utf8_length = len(value.encode('utf-8')) length = (utf8_length - length) / 2 + length return int(length) #设置字体font = xlwt.Font()font.bold = True #设置边框borders = xlwt.Borders()borders.left = xlwt.Borders.THINborders.right = xlwt.Borders.THINborders.top = xlwt.Borders.THINborders.bottom = xlwt.Borders.THIN #设置居中alignment = xlwt.Alignment()alignment.horz = xlwt.Alignment.HORZ_CENTER #水平方向alignment.vert = xlwt.Alignment.VERT_TOP #垂直方向 #设置背景颜色pattern = xlwt.Pattern()pattern.pattern = xlwt.Pattern.SOLID_PATTERNpattern.pattern_fore_colour = 3 #背景颜色 #定义不同的excel stylestyle1 = xlwt.XFStyle()style1.font = fontstyle1.borders = bordersstyle1.alignment = alignmentstyle2 = xlwt.XFStyle()style2.borders = bordersstyle2.alignment = alignmentstyle3 = xlwt.XFStyle()style3.borders = bordersstyle3.alignment = alignmentstyle4 = xlwt.XFStyle()style4.borders = bordersstyle4.font = fontstyle4.pattern = patternstyle4.alignment = alignmentworkbook = xlwt.Workbook(encoding='utf-8')worksheet = workbook.add_sheet('My Worksheet') #确定栏位宽度col_width = []for i in range(len(result)): for j in range(len(result[i])): if i == 0: col_width.append(len_byte(result[i][j])) else: if col_width[j] < len_byte(str(result[i][j])): col_width[j] = len_byte(result[i][j]) #设置栏位宽度,栏位宽度小于10时候采用默认宽度for i in range(len(col_width)): if col_width[i] > 10: worksheet.col(i).width = 256 * (col_width[i] + 1) #设置栏位高度# tall_style = xlwt.easyxf('font:height 720;') #设置字体高度# row0 = worksheet.row(0)# row0.set_style(tall_style) #excel内容写入for i in range(len(result)): for j in range(len(result[i])): if i == 0: worksheet.write(i, j, label=result[i][j], style=style1) else: worksheet.write(i, j, label=result[i][j], style=style2) #excel统计结果写入for m in range(len(total)): for n in range(len(total[m])): if m == 0: worksheet.write(m + i + 3, n + 2, label=total[m][n], style=style4) else: worksheet.write(m + i + 3, n + 2, label=total[m][n], style=style2) #合并单元格worksheet.write_merge(m + i + 4, m + i + 6, 2, 4, label='统计: 签名:', style=style3)workbook.save('Excel_Workbook.xls')
xlwt模块自适应列宽写入excel
最近需要写一个用python将数据写入excel的小工具,遇到了自适应列宽写入excel的问题,特此记录下解决思路及过程。
运行环境:Windows10、PyCharm 2017.3.2、Python3.6、xlwt1.3.0
编写小dome如下
import xlwt'''利用python的xlwt模块自适应列宽写入excel'''row_num = 0 # 记录写入行数# 个人信息:姓名,性别,年龄,手机号,固定电话,邮箱line_name = ['姓名','性别','年龄','手机号','固定电话','邮箱']data = [ ['厘清','女','31','18745214693','010-4784125','5412546qq.com'], ['张三','男','26','18245554693','010-4784125','无'], ['王武','男','19','13245266693','无','785992546qq.com'], ['熊大','男','16','无','010-4784125','115412546qq.com'], ['熊二','男','22','18745214693','010-4784125','3654126qq.com'] ]# 创建一个Workbook对象book = xlwt.Workbook(encoding="utf-8",style_compression=0)# 创建一个sheet对象sheet = book.add_sheet('person_msg', cell_overwrite_ok=True)# 写入列名for name in range(0, len(line_name)): sheet.write(row_num, name, line_name[name])row_num += 1# 写入数据for i in range(0, len(data)): for j in range(0, len(data[i])): sheet.write(row_num, j, data[i][j]) row_num += 1# 保存excel文件book.save('person_msg.xls')
生成的excel文件没有任何排版比较乱
解决思路
获取每列写入字符长度,比较出每列最宽的长度,最后设置合适的长度。
计算字符串的长度时要注意一个汉字占两个字节,需要指定字符串的字符集才能获取正确的字符数
>>> str = 'liming李明'>>> len(str)8>>> len(str.encode('gb18030'))10
最后代码如下
import xlwtimport copy'''利用python的xlwt模块自适应列宽写入excel'''# 获取每列所占用的最大列宽def get_max_col(max_list): line_list = [] # i表示行,j代表列 for j in range(len(max_list[0])): line_num = [] for i in range(len(max_list)): line_num.append(max_list[i][j]) # 将每列的宽度存入line_num line_list.append(max(line_num)) # 将每列最大宽度存入line_list return line_listdef write_excel(): row_num = 0 # 记录写入行数 col_list = [] # 记录每行宽度 # 个人信息:姓名,性别,年龄,手机号,固定电话,邮箱 data = [ ['姓名','性别','年龄','手机号','固定电话','邮箱'], ['厘清','女','31','18745214693','0104784125','5412546qq.com'], ['张三','男','26','18245554693','010-4784125','无'], ['王武','男','19','13245266693','无','785992546qq.com'], ['熊大','男','16','无','010-4784125','115412546qq.com'], ['熊二','男','22','18745214693','010-4784125','3654126qq.com'] ] # 创建一个Workbook对象 book = xlwt.Workbook(encoding="utf-8",style_compression=0) # 创建一个sheet对象 sheet = book.add_sheet('person_msg', cell_overwrite_ok=True) col_num = [0 for x in range(0, len(data))] # 写入数据 for i in range(0, len(data)): for j in range(0, len(data[i])): sheet.write(row_num, j, data[i][j]) col_num[j] = len(data[i][j].encode('gb18030')) # 计算每列值的大小 col_list.append(copy.copy(col_num)) # 记录一行每列写入的长度 row_num += 1 # 获取每列最大宽度 col_max_num = get_max_col(col_list) # 设置自适应列宽 for i in range(0, len(col_max_num)): # 256*字符数得到excel列宽,为了不显得特别紧凑添加两个字符宽度 sheet.col(i).width = 256 * (col_max_num[i] + 2) # 保存excel文件 book.save('person_msg.xls')write_excel()
生成excel文件person_msg.xls
感谢各位的阅读!关于"Python如何生成excel栏位宽度可自适应内容长度"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
长度
宽度
字符
内容
生成
姓名
年龄
性别
对象
手机
手机号
文件
电话
邮箱
最大
字符串
数据
模块
张三
两个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
厦门软件开发公司迈
华南it学院软件开发
软件开发工具的4个特征
职称评审服务器卡卡卡
腾讯云数据库默认密码
珠海 软件开发工程师
服务器运维充不了话费怎么办
网站服务器地址和管理密码
数据库管理技术证书
哪里有做数据库培训班
静安区咨询软件开发哪个好
网络技术与安全研究生
网络安全对纪检监察的重要性
南通公司网络安全准入控制哪家好
网络安全审查知识问答
安装路由器服务器无响应
能提供外科手术视频的数据库
数据插入数据库的方法
工业二级系统用什么软件开发
服务器数据返回异常怎么解决
xx区妇联网络安全自查报告
电脑电子软件开发是干什么的
中国重要报纸全文数据库如何统计
网络安全竞赛2021
08数据库在哪
sql中如何附加数据库文件
徐州秀透网络技术有限公司
上海瑕疵检测软件开发
网络安全监测工程师
rust有多少个服务器