Crystal Reports 2011:过长字符串按逗号截断加省略号实现方法咨询
Crystal Reports 2011 长文本按逗号截断并添加省略号实现方案
刚上手Crystal Reports 2011遇到这种文本溢出问题太常见了,我之前做报表的时候也折腾过这个,给你详细说下怎么实现:
实现位置
所有逻辑都要在公式字段里完成,步骤是:
- 打开报表设计器,右键点击「字段资源管理器」里的「公式字段」→ 「新建」
- 给公式起个名字(比如
TruncatedText),进入公式编辑器编写代码 - 把原文本框绑定的字段替换成这个新的公式字段
实现思路
- 先对比原始字符串的显示宽度和文本框的实际宽度,判断是否需要截断
- 如果需要截断,找到字符串中最后一个逗号的位置,截断到该位置
- 在截断后的文本末尾添加
...;如果没有逗号,就直接按宽度截断后加省略号(可自定义逻辑)
代码示例(Crystal语法)
// 1. 配置参数:替换成你自己的文本框和字段信息 NumberVar textBoxWidth := 3600; // 文本框宽度(单位:缇,1英寸=1440缇,可在文本框属性里查看) StringVar sourceText := {你的数据源.目标字段}; // 替换成实际绑定的字段 StringVar resultText; // 2. 判断文本是否超出文本框宽度 If TextWidth(sourceText, txt_TargetTextBox.Font, txt_TargetTextBox.FontSize) > textBoxWidth Then ( // 3. 查找最后一个逗号的位置 NumberVar lastCommaIndex := LastPositionOf(",", sourceText); If lastCommaIndex > 0 Then // 截断到最后一个逗号并加省略号 resultText := Left(sourceText, lastCommaIndex) + "..." Else // 如果没有逗号,按宽度截断(这里也可以改成按字符数截断) resultText := Left(sourceText, Length(sourceText) - 3) + "..." ) Else // 文本未溢出,直接返回原内容 resultText := sourceText; // 返回最终处理后的文本 resultText;
关键注意事项
- 一定要保证公式字段的字体、字号、字间距和原文本框完全一致,否则
TextWidth计算的宽度会不准确 - 文本框的宽度可以在设计视图中右键文本框→「格式化对象」→「大小」里查看,直接用里面的数值即可
- 如果需要处理多行文本,可在公式里添加换行符判断的逻辑,不过你的需求是长字符串单行截断,上面的代码足够用
内容的提问来源于stack exchange,提问作者Hebi
相关产品推荐
相关产品推荐

