【问题标题】:Is it possible to show the contents of a text file in Crystal Reports是否可以在 Crystal Reports 中显示文本文件的内容
【发布时间】:2009-06-22 14:12:23
【问题描述】:

我有一个包含绝对引用文本文件列表的水晶报告。每个正文行都引用了一个文本文件。

例如

line1    c:\file1.txt
line2    c:\file2.txt

有没有办法在 Crystal 中显示这些文件的内容?

即我希望每个水晶体线都显示引用文本文件中的文本。

我正在使用带有非标准数据库连接器 (dataflex) 的 Crystal 报表 11。

【问题讨论】:

    标签: crystal-reports text-files


    【解决方案1】:

    您需要设置一个文件 dsn(在 XP 中它位于控制面板/管理工具/数据源 (ODBC) 下),然后将文件 dsn(Microsoft 文本驱动程序)用于数据源作为 ODBC(RDO) 连接。

    我将这个测试场景设置在我的身上,如下所示:

    **File 1**
    column1
    1row1
    1row2
    1row3
    
    **File 2**
    column1
    2row1
    2row2
    2row3
    

    我将文件 dsn 设置为指向 c 驱动器,并在数据源屏幕中将 file1.txt 和 file2.txt 添加到选定的表中。然后最简单的事情是清除表的链接,以便它拉动每一行。它会警告您有多个起点。我一般不推荐这个,但它会在这种情况下工作,因为它没有报告数据库,它可能不是世界末日。如果您忽略起始点消息,然后将字段添加到报告中,当您运行它时,您应该得到以下输出:

    1row1     2row1
    1row1     2row2
    1row1     2row3
    1row2     2row1
    1row2     2row2
    1row2     2row3
    1row3     2row1
    1row3     2row2
    1row3     2row3
    

    您可以从中更改分组以获得所需的输出。

    您也可以对子报表使用相同的连接,而不是在主报表从 file1.txt 中提取信息的地方执行此链接,然后将子报表放在从 file2.txt 中提取的报表页脚中。此选项不会整理文本,但您仍然可以在同一个报告中使用它。

    希望这会有所帮助。

    【讨论】:

    • 这个问题的赏金去哪儿了?
    【解决方案2】:

    这比你想象的要容易。在我写这篇文章之前,我只是自己设置了一个,以确保我给你正确的步骤。使用 CR 版本 XI 和 .txt 文件,我按照以下步骤操作:

    1. 对于您要导入的每个文本文件,在您的报告中创建一个小节(即 DetailsA、DetailsB 等)。如果您的文本文件列表不断变化(根据您的描述,我认为不是),您将需要另一种方法。
    2. 确保您的文本文件以逗号分隔并且第一行包含字段名称。如果这些文本文件实际上是文本(即不是表格),那么只需在第一行放置一个虚拟变量名称,Crystal 就会将文本视为只有 1 行的数据表。
    3. 为每个要显示的文本文件,创建一个新的子报表(插入->子报表)
    4. 在数据库选择菜单中,转到“创建新连接”->“Access/Excel (DAO)”
    5. 在“数据库类型”下,您会在屏幕底部看到一个“文本”选项。
    6. 选择您的文件。
    7. 放松! (今天早上心情不错,不知道为什么)

    【讨论】:

      【解决方案3】:

      我想如果你有一个函数,它以文件名作为参数并返回该文件的内容 - 你可以在 Crystal Report 公式中使用该函数。

      我对当前的 CR 不熟悉,距离我上次使用它已经有好几年了(我上次使用的是第 8 版)。在我使用的版本中,没有内置这样的函数。那时你必须做的是创建一个包含你需要的函数的 UFL(用户函数库)。如果我没记错的话,您必须使用 COM 来执行此操作。

      在这个时代,我猜你可以使用其他机制来扩展 CR,也许是编写 .NET 代码?

      我建议您在 CR 文档中搜索术语 UFL。

      【讨论】:

      • 这样做只返回文本文件的前 256 个字符。
      • 否 - 仔细检查,它肯定不起作用。网上有一些建议,Crystal 报表的公式结果限制为 255 个字符。
      【解决方案4】:

      另一个建议,那么:

      • 创建新表 FILECONTENTS(文件名 varchar 主键,内容 blob)
      • 创建一个脚本,按计划使用所有文件的文件名和内容填充此表(假设文件数量有限,并且您有办法了解它们)
      • 修改报表数据源查询以将其与 FILECONTENTS 表连接,并将内容字段添加到报表中。

      【讨论】:

      • 很遗憾,我们的数据库不允许大于 17K 的 blob。 (不要问。)我会继续搜索。
      • 您可以随时推送包含文本的数据集。
      【解决方案5】:

      你可以设置一个文件 dsn.但这适用于表格文件数据,而不是文本。

      这些文本文件有多大?您想显示每个文件的全部内容吗?

      可能没有简单的方法可以从水晶内部动态读取文件。您很可能必须将数据集推送到包含文件内容的报告中。

      【讨论】:

        猜你喜欢
        • 2020-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-12
        • 1970-01-01
        • 2013-03-20
        • 2011-12-18
        • 1970-01-01
        相关资源
        最近更新 更多