是否可以在Crystal Reports中显示文本文件的内容

时间:2009-06-22 14:12:24

标签: crystal-reports text-files

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

e.g。

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

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

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

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

5 个答案:

答案 0 :(得分:4)

您需要设置文件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提取的报表页脚中。此选项不会整理文本,但您仍然可以在同一报告中使用它。

希望这会有所帮助。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

我对目前的CR不熟悉,自从我上次使用它已经好几年了(我上次使用的是版本8)。在我使用的版本中,没有内置这样的功能。那时你需要做的是创建一个包含你需要的功能的UFL(用户函数库)。如果我没记错的话,你必须使用COM来做到这一点。

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

我建议您在CR文档中搜索UFL这个词。

答案 3 :(得分:0)

另一个建议是:

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

答案 4 :(得分:0)

您可以设置文件dsn。但这是针对表格文件数据,而不是文本。

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

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