Skip to content

comewhy/Mes-system-process-printing-tool

Repository files navigation

MES系统工艺打印工具

这是一个用于处理和打印MES系统工艺文件的工具。

功能特点

  • 支持Excel文件拖拽运行
  • 支持单文件和批量文件处理
  • 自动调整Excel单元格文本大小
  • 支持工序流转工时卡数据自动填充
  • 灵活的打印选项
  • 完整的日志记录

使用方法

  1. 直接将MES系统导出的Excel工艺文件拖拽到程序图标即可运行
  2. 如需打印工序流转工时卡,请将"工序流转工时卡.xlsx"放入"打印文件"文件夹
  3. 程序会自动处理文件并弹出打印界面
  4. 在打印界面可选择需要打印的工作表和打印份数
  5. 打包单文件的exe程序使用时,需把源码目录内的“工序流转工时卡.xlsx"保存在“打印文件”目录内,再执行打包

系统要求

  • Windows操作系统
  • Python 3.8+
  • 见requirements.txt中的依赖包

注意事项

  • 打印文件填充数据后只用于打印,不会保存
  • 所有文件处理过程不会改变原有单元格大小及页面大小
  • 保留单元格原有的对齐、加粗等格式

check_cell_overflow方法分析

功能概述

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: 是否溢出
    """

工作原理

该方法通过以下步骤判断文本是否会溢出:

  1. 估算文本宽度

    • 设定一个字符的宽度约为字体大小的2/3(经验值)
    • 将Excel列宽单位转换为磅单位(1个Excel宽度单位≈8.43磅/7字符)
  2. 估算文本高度

    • 根据文本宽度和单元格宽度计算需要的行数
    • 每行高度约为字体大小的1.2倍
    • 计算总文本高度 = 行数 × 行高
  3. 溢出判断

    • 当估算的文本宽度大于单元格宽度,或
    • 当估算的文本高度大于单元格高度时
    • 判定为溢出(返回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

使用场景

此方法主要在以下两个场景中使用:

  1. _adjust_font_size_if_needed方法中,用于判断单元格内容是否溢出,并相应调整字体大小
  2. _adjust_severe_overflow方法中,用于处理严重溢出的单元格,采用平衡的调整策略

算法特点

  1. 简化近似:该方法使用简化的近似计算,不考虑不同字体的具体渲染差异
  2. 经验系数:使用经验系数(如字符宽度=字体大小×2/3)来估算实际渲染尺寸
  3. 日志记录:记录文本内容、字体大小、单元格和文本尺寸,便于调试

相关方法

  • _adjust_font_size_if_needed: 如果发现文本溢出,会使用二分查找算法确定合适的字体大小
  • _adjust_severe_overflow: 处理严重溢出的单元格,使用更平衡的调整策略
  • _auto_shrink_font: 兼容方法,直接调用_adjust_severe_overflow

About

Mes系统工艺打印工具

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors