Python如何生成excel栏位宽度可自适应内容长度
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章给大家分享的是有关Python如何生成excel栏位宽度可自适应内容长度的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。xlwt工具使用,生成excel栏位宽度可自适
千家信息网最后更新 2025年01月31日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安全错误
数据库的锁怎样保障安全
网络安全技术人员表
我的世界电脑连接服务器无效会话
幼儿园网络安全视频简报
签名服务器加密机
当前网络安全维护内容
舆情和网络安全管控
网络安全保卫部门职责任务
拉萨二职计算机网络技术
网络安全法44条违法案例
数据库使用那种系统比较好
国家网络安全测评中心
网络dhcp服务器
全球网络技术大会在宁开幕
怎么在原ppt上改数据库
嘉定区正规数据库服务销售
浙江网络技术咨询有哪些
永恒之塔数据库 178
软件开发等级怎么考
网络安全宣传画及标语
网络安全手抄报初一水平
什么单位需要做网络安全
网络安全画稿怎样画
网络安全app营销思路
合肥蜀山区软件开发公司
医院信息系统服务器配置
大数据库有啥标准
天盛网络技术有限公司招聘
关于防护网络安全的美文
长沙软件开发培训有哪些
鼎新erp软件开发企业