python:excel批量设置打印格式
本篇博客介绍 xlwt 模块设置 Excel表格文件的默认打印格式、自动调整列宽。
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
import math
import os
import re
from openpyxl.styles import Fontdef check_contain_chinese(check_str):"""验证某一个字符串是否包含中文字符串,并返回中文字符串个数( >=0 ):param check_str::return:"""count = 0for ch in check_str:if u'\u4e00' <= ch <= u'\u9fff':count += 1else:continuereturn countdef get_num_colnum_dict():""":return: 返回字典:{1:'A', 2:'B', ...... , 52:'AZ'}"""num_str_dict = {}A_Z = [chr(a) for a in range(ord('A'), ord('Z') + 1)]AA_AZ = ['A' + chr(a) for a in range(ord('A'), ord('Z') + 1)]A_AZ = A_Z + AA_AZfor i in A_AZ:num_str_dict[A_AZ.index(i) + 1] = ireturn num_str_dictdef excel_print(file_name, save_root):"""Excel打印设置选择打印区域、调整打印设置:param save_root::param file_name::return:"""wb = load_workbook(file_name, data_only=True)wb_1 = load_workbook(file_name, data_only=False) # 为了最终保存的文件可以保留原有公式# 获取Excel中的sheetsheet_name = wb_1.get_sheet_names()# 遍历Excel中的sheetfor i in range(0, len(sheet_name)):# 切换活动sheeta_sheet = wb[wb.sheetnames[i]]b_sheet = wb_1[wb_1.sheetnames[i]]b_sheet.views.sheetView[0].zoomScale = 100 # 视图缩放100%# 将字母A~Z放入列表中li = [chr(i) for i in range(ord("A"), ord("Z") + 1)]# 取总列数和26个英文字母的余数,判断总列数所在单元格的英文字母是啥aaa = b_sheet.max_column % 26# 将字母等价于对应列max_lie = li[aaa - 1]# 如果列数超出了A~Z,那么后面列数对应AA、AB...BA、BB...BZ...ZZ,依然按前面的判断,获取对应字母,进行拼接if b_sheet.max_column > 26:# 向下取整bbb = math.floor(b_sheet.max_column / 26)li_1 = [chr(i) for i in range(ord("A"), ord("Z") + 1)]max_lie = li_1[bbb - 1] + li[aaa - 1]# 验证最终列值print(f"{sheet_name[i]}(Sheet)-验证最终列值:" + max_lie, b_sheet.max_column)# 打印范围b_sheet.print_area = f'A1:{max_lie}{b_sheet.max_row}'print(f"{sheet_name[i]}(Sheet)-打印范围:{b_sheet.print_area}")# 设置打印页脚b_sheet.oddFooter.center.text = "第&[Page]页 共&[Pages]页" # 文本b_sheet.oddHeader.center.size = 14 # 大小# 添加打印标题# 可以在每一页上打印标题以确保正确标记数据。# a_sheet.print_title_cols = 'b:c' # the first two colsb_sheet.print_title_rows = '2:3' # the first rowb_sheet.page_setup.orientation = "landscape" # 设置打印方向 values=("default", "portrait", "landscape")# 设置缩放所有列到一页,直接设置fitToWidth=True无效,需采用如下方法# 所有列设置为一页 逆向思维,先缩放到页面 然后适合高度改为 FALSEb_sheet.sheet_properties.pageSetUpPr.fitToPage = True # 此行必须设置b_sheet.page_setup.fitToHeight = False# 设置一部字典用于保存列宽数据dims = {}# 遍历表格数据,获取自适应列宽数据i1 = 0for row in a_sheet.rows:i1 += 1if i1 < 4:continuefor cell in row:# if cell.value:# 遍历整个表格,把该列所有的单元格文本进行长度对比,找出最长的单元格# 在对比单元格文本时需要将中文字符识别为1.7个长度,英文字符识别为1个,这里只需要将文本长度直接加上中文字符数量即可# re.findall('([\u4e00-\u9fa5])', cell.value)能够识别大部分中文字符if type(cell.value) == float:cell_len = 0.7 * len(re.findall('([\u4e00-\u9fa5])', str(round(cell.value, 4)))) + len(str(round(cell.value, 4)))else:cell_len = 0.7 * len(re.findall('([\u4e00-\u9fa5])', str(cell.value))) + len(str(cell.value))dims[cell.column] = max((dims.get(cell.column, 0), cell_len))for col, value in dims.items():if b_sheet.max_column == 7:if get_column_letter(col) in {'A', 'B', 'C'}:b_sheet.column_dimensions[get_column_letter(col)].width = value + 7else:b_sheet.column_dimensions[get_column_letter(col)].width = 16.0elif b_sheet.max_column < 11:continueelse:# 设置列宽,get_column_letter用于获取数字列号对应的字母列号,最后值+是用来调整最终效果的if get_column_letter(col) == 'A':b_sheet.column_dimensions[get_column_letter(col)].width = value + 4else:if value + 2.5 < 7:b_sheet.column_dimensions[get_column_letter(col)].width = 7.5else:b_sheet.column_dimensions[get_column_letter(col)].width = value + 2.5# 设置行高for q in range(1, a_sheet.max_row+1):if q == 1:b_sheet.row_dimensions[q].height = 50elif q < 4:b_sheet.row_dimensions[q].height = 60else:b_sheet.row_dimensions[q].height = 25# 设置字体大小i1 = 1for row in b_sheet.rows:for cell in row:if i1 == 1:cell.font = Font(size=28, bold=True)elif i1 < 4:cell.font = Font(size=14, bold=True)else:continuei1 += 1save_file_name = file_name.split("/")[-1].split(".")[0]wb_1.save("%s/%s.xlsx" % (save_root, save_file_name))wb.close()def test_main():file_dir = 'C:/Users/Administrator/Desktop/test'save_root = 'C:/Users/Administrator/Desktop/test/test'text_map = {"xlsx", "xls"}for root, dirs, files in os.walk(file_dir, topdown=False):for file_name in files:if file_name.split(".")[-1] not in text_map:continueelse:excel_print(file_name=root + '/' + file_name, save_root=save_root)if __name__ == '__main__':test_main()
总结
创建两个openpyxl对象,一个用来获取公式结果值的列宽,一个为了调整时保留原有公式。
参考文章
https://blog.csdn.net/copa_ax99/article/details/119707839
python:excel批量设置打印格式相关推荐
- Python Pillow批量转换tif格式到jpg
Python Pillow批量转换tif格式到jpg 也可以自定义多种格式转化 清晰度依旧哦 最近有个任务就是将tif转成jpg的,但是呢,一张一张去photoshop里面转太慢了,所以就想着用pyt ...
- Excel批量把数字格式变成文本格式且不用双击出现左上绿标
Excel批量把数字格式变成文本格式且不用双击出现左上绿标 解决方案 问题描述: excel里面有大量数字,并且小数点后几位都不显示, 复制到txt文本里面都是缩略的数据, 于是设置成文本格式,复制过 ...
- Excel批量将固定格式的源数据提取到一个表中
今天我和大家分享的是,Excel批量将固定格式的源数据提取到一个表中,详见下面的动图演示.我们需要将源数据表中以列形式存放的姓名和年龄统一汇总提取到以行形式的数据表中. (方方格子插件.) 1.首先我 ...
- Excel批量设置下划线
Excel批量设置下划线 目录 Excel批量设置下划线 1.框选需要设置的单元格内容,鼠标右键选择"设置单元格格式" 2.点击"自定义"在类型框中输入&quo ...
- 根据excel批量生成打印卡片功能
根据excel批量生成打印卡片功能 这天某大人在企业微信跟我说上级领导要她打印整个工厂的临时出入车控制卡片,发给我一个资料,让我看看能不能帮她搞一下,资料就如下: 我一看,我操,原来是整个工厂好几百人 ...
- 多个 Excel 批量设置页眉页脚
概要:给 Word 添加页眉页脚相信大家都很熟悉,但是你有给 Excel 设置过页眉页脚吗?你知道怎么给 Excel 设置页眉页脚吗?如果我们的 Excel 文件很多的时候,你又知道怎么批量的给多个 ...
- 如何利用Excel批量设置化学式下标
今天跟大家分享一下如何利用Excel批量设置化学式下标 1.打开Excel文件,如下图我们想要批量将下面的不标准化学式转为标准化学式. 2.首先我们选中化学式单元格区域 3.点击下图选项(Excel工 ...
- excel怎么设置打印区域_Excel如何设置打印区域及打印区域如何调整
方法/步骤 1.打开编辑好的Excel文档,选中想要打印的区域,如图所示(阴影图层部分为所要打印的区域) 2.点击页面布局选项卡,选择打印区域选项, 点击设置打印区域子选项,这时候我们就成功设置了打印 ...
- 多个 Excel 批量设置页码信息
概要:在 Word 中,我们经常需要跟页面添加页码信息,其实在 Excel 中也是可以添加页码信息的!你知道怎么给 Excel 添加页码信息吗?如果有很多 Excel 文件都需要添加页码信息,你又知道 ...
最新文章
- 防止代码变质的思考与方法
- python wxpy_wxpy
- mysql-proxy安装包_Mysql-proxy安装
- python3下的paramiko 安装
- Ansible 快速入门
- 【excrt】屠龙勇士(luogu 4774)
- javabeans_(单元测试)JavaBeans的技巧
- MySQL 深潜 - MDL 锁的实现与获取机制
- 好玩gan_效果超赞服务器挤爆!用GAN生成人像油画火了,带你一秒回到文艺复兴...
- 阿里云部署SSL证书
- 使用Powershell自动化Linux,macOS和Windows进程
- 通过java程序实现mysql 批量一个表的子段更新另一个表的字段
- iframe 返回上一页_Swagger权限认证上:基于Apache Shiro
- 金山文字 职称计算机,职称计算机:金山文字2005考试大纲
- matlab 水文断面,基于MATLAB的河道横断面的绘制
- STM32L476+STM32cubeMx+Freemodbus移植记录
- c语言一本书的页码从自然数1开始顺序编码,C++_关于统计数字问题的算法,一本书的页码从自然数1开始顺 - phpStudy...
- Xcode5 创建模板和UIView 关联XIB
- 2021年在线教育发展趋势
- 云平台 物联网 概念 数据挖掘技术