能否在Crystal Reports中显示文本文件的内容?

5
我可以帮助您翻译以下内容:

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

例如:

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

有没有办法在Crystal中显示这些文件的内容?
例如,我希望每个水晶体行都显示来自参考文本文件的文本。
我正在使用Crystal Reports 11与非标准数据库连接器(dataflex)。
5个回答

4

您需要设置一个文件DSN(在XP中,它位于控制面板/管理工具/数据源(ODBC)下),然后使用文件DSN(Microsoft Text Driver)作为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中提取信息的子报表。这种选项不会对文本进行汇总,但您仍将在同一报表中拥有它。

希望这能对您有所帮助。


这个问题的赏金去哪了? - Dusty

1

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

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

0

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

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

现今,我猜你可以使用其他机制扩展CR,比如编写.NET代码?

我建议你在CR文档中搜索UFL这个术语。


这样做只会返回文本文件的前256个字符。 - seanyboy
不行 - 经过双重检查,它绝对不起作用。网上有一些建议称Crystal报表对公式结果有255个字符的限制。 - seanyboy

0

另一个建议:

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

很遗憾,我们的数据库不允许大于17K的BLOB。(别问为什么。)我会继续搜索。 - seanyboy
你总是可以推送一个包含文本的数据集。 - dotjoe

0
你可以设置一个文件 DSN,但这更适用于表格文件数据,而不是文本。
这些文本文件有多大?你想要显示每个文件的全部内容吗?
很可能没有一种简单的方法在 Crystal 中动态读取文件。你很可能需要将包含文件内容的数据集推送到报告中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接