Python如何生成excel栏位宽度可自适应内容长度
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章给大家分享的是有关Python如何生成excel栏位宽度可自适应内容长度的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。xlwt工具使用,生成excel栏位宽度可自适
千家信息网最后更新 2025年11月08日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安全错误
数据库的锁怎样保障安全
在服务器上找不到目录路径
电脑无法连接到网络服务器未运行
2022中国网络安全事件案例
珠海聚格互联网科技有限公司
网络安全保护的四新
甘肃幻想世界网络技术有限公司
喜氏互联网科技
浙江省网络技术及应用
深圳金融量化软件开发公司
工商银行北京软件开发
天津数据库空投箱推荐厂家
软件开发及其模型的案例
第三代数据库技术发展阶段
ktv服务器爆机怎么回事
数据库技术与应用实验3
北京建筑管理软件开发公司
吉林省开天通信网络技术有限公司
串口服务器故障灯图解
物联网无线网络技术在哪一次
原神怎么从小米服务器转到官服
l服务器异常
上海系统软件开发定制费用
甲骨文数据库排名
网络安全宣讲稿50字
法律数据库资源的认识
网信部门 网络安全信息收集
现代化网络技术销售公司
国家科学技术奖数据库
计算机网络技术专业百度贴吧
服务器如何防护中间人攻击