这是一个用于处理和打印MES系统工艺文件的工具。
- 支持Excel文件拖拽运行
- 支持单文件和批量文件处理
- 自动调整Excel单元格文本大小
- 支持工序流转工时卡数据自动填充
- 灵活的打印选项
- 完整的日志记录
- 直接将MES系统导出的Excel工艺文件拖拽到程序图标即可运行
- 如需打印工序流转工时卡,请将"工序流转工时卡.xlsx"放入"打印文件"文件夹
- 程序会自动处理文件并弹出打印界面
- 在打印界面可选择需要打印的工作表和打印份数
- 打包单文件的exe程序使用时,需把源码目录内的“工序流转工时卡.xlsx"保存在“打印文件”目录内,再执行打包
- Windows操作系统
- Python 3.8+
- 见requirements.txt中的依赖包
- 打印文件填充数据后只用于打印,不会保存
- 所有文件处理过程不会改变原有单元格大小及页面大小
- 保留单元格原有的对齐、加粗等格式
check_cell_overflow方法用于检测Excel单元格中的文本是否会溢出单元格边界。这是ExcelProcessor类中的一个关键方法,用于智能调整字体大小,确保文本能正确显示在单元格内。
def check_cell_overflow(self, text, font_size, column_width, row_height):
"""
检查给定文本在指定字体大小下是否会溢出单元格
Args:
text: 要检查的文本
font_size: 字体大小(磅)
column_width: 列宽(单位为Excel的字符宽度单位)
row_height: 行高(磅)
Returns:
bool: 是否溢出
"""该方法通过以下步骤判断文本是否会溢出:
-
估算文本宽度:
- 设定一个字符的宽度约为字体大小的2/3(经验值)
- 将Excel列宽单位转换为磅单位(1个Excel宽度单位≈8.43磅/7字符)
-
估算文本高度:
- 根据文本宽度和单元格宽度计算需要的行数
- 每行高度约为字体大小的1.2倍
- 计算总文本高度 = 行数 × 行高
-
溢出判断:
- 当估算的文本宽度大于单元格宽度,或
- 当估算的文本高度大于单元格高度时
- 判定为溢出(返回True)
# 估算文本宽度
char_width = font_size * 2/3 # 单位:磅
excel_width_to_pt = 8.43 / 7 # 每个Excel宽度单位对应的磅数
cell_width = column_width * excel_width_to_pt * 7 # 单位:磅
# 估算文本高度
line_count = 1
current_line_width = 0
for char in text:
current_line_width += char_width
if current_line_width > cell_width:
line_count += 1
current_line_width = char_width
# 行高计算(单行高度约为字体大小的1.2倍)
line_height = font_size * 1.2 # 单位:磅
text_height = line_count * line_height
# 检查是否溢出
text_width = max([len(line) for line in text.split('\n')]) * char_width此方法主要在以下两个场景中使用:
- 在
_adjust_font_size_if_needed方法中,用于判断单元格内容是否溢出,并相应调整字体大小 - 在
_adjust_severe_overflow方法中,用于处理严重溢出的单元格,采用平衡的调整策略
- 简化近似:该方法使用简化的近似计算,不考虑不同字体的具体渲染差异
- 经验系数:使用经验系数(如字符宽度=字体大小×2/3)来估算实际渲染尺寸
- 日志记录:记录文本内容、字体大小、单元格和文本尺寸,便于调试
_adjust_font_size_if_needed: 如果发现文本溢出,会使用二分查找算法确定合适的字体大小_adjust_severe_overflow: 处理严重溢出的单元格,使用更平衡的调整策略_auto_shrink_font: 兼容方法,直接调用_adjust_severe_overflow