【问题标题】:Crystal Reports cut of string水晶报表切割字符串
【发布时间】:2018-01-29 21:34:44
【问题描述】:

我是 Crystal Reports 的新手,我正在寻找一种方法来在字符串太长时切断字符串并将结尾替换为 ...

所以我使用 Crystal Reports 来生成 Word 或 PDF 文件。现在的问题是我的文本字段对于长字符串来说太小了。

我想要做的是检查字符串是否对于字段来说太长。如果是,则在最后一个, 处剪掉字符串,并将结尾替换为...

如何以及在哪里可以做到这一点?代码会是什么样子?

我正在使用 Crystal Reports 2011。

【问题讨论】:

    标签: string crystal-reports crystal-reports-2011


    【解决方案1】:

    一种方法是使用Len-、Left-、Instr- 和Instrrev-函数。

    下面的公式应该会给你预期的结果。 (仅适用于 monospaced font。)

    NumberVar MaxLen := 200;
    
    If Len({MyTable.MyColumn}) > MaxLen Then
        //Length is > MaxLen
        If Instr(Left({MyTable.MyColumn}, MaxLen),",")>0 Then
            //comma (,) found in first 200 chars -> cut at last comma
            Left({MyTable.MyColumn}, Instrrev(Left({MyTable.MyColumn}, MaxLen), ",")-1) & "..."
        Else    
            //NO comma (,) found in first 200 chars -> cut after char 197
            Left({MyTable.MyColumn}, MaxLen-3) & "..."
    Else
        //Length is <= 200  -> use the whole text
        {MyTable.MyColumn}
    

    在本例中,最大长度为 200 个字符。
    只需将变量 MaxLen 调整为您需要的字符数即可。

    【讨论】:

    • 非常感谢您的回复。我测试了它,它似乎无法正常工作。我需要设置一个特定的设置。就像字段本身的可变大小一样。我能不能把文件给你,你快点看一下。将不胜感激。
    • 您使用的是像 Courier 这样的等宽字体吗?如果不是,那么每个字符的宽度会有所不同。 “w”比“i”宽得多,除非您使用等宽字体,否则计算字符数并不是预测字段中可容纳多少字符的可靠方法。
    • 我尝试使用 Courier 字体,但没有成功。在字段空间用完之前,我输出了 120 个字符。即使上面的查询设置为最大 100 个字符。通常我使用字体 Verdana。
    • @PhilippeHebeisen 对不起,我好像误解了你的要求。恐怕没有可靠的方法来使用水晶报告来实现这一点,除非像 R. McMillan 所写的那样使用这种公式和等宽字体。
    • @MatSnow 我尝试使用具有相同查询的等宽字体,但它没有工作,你对“这种公式”是什么意思?如果可行,我不介意使用等宽字体。
    猜你喜欢
    • 2021-06-13
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多