crystal 报表在列中打印纯文本
crystal report print plain text in columns
我在 crystal 报告中有一份报告显示了从数据库中获取的地址列表,格式如下:
`<some codes regarding object to send>
<Name> <Surname>
<Address>
<zip> <City>
<other informations>`
我需要以纯文本形式将这些地址打印成 3 或 4 列(根据用户选择)。
使用 PDF 报告没有问题,但如果我设置为纯文本,它只显示一列。
你能帮助我吗?
感谢和问候
总体思路是创建两个详细信息部分。一个有 3 列,另一个有 4 列。并显示或隐藏其中之一。
一步一步:
创建一个包含列数的参数。我们称它为 {?NumberOfColumns}。正如您所说,我假设它只能是 3 或 4。
创建两个详细信息部分:A 和 B。
当 {?NumberOfColumns} = 4 时,使用分区专家抑制详细分区 A。
当 {?NumberOfColumns} = 3 时,使用部分专家抑制详细部分 B。
在 A 部分使用部分专家。标记 "format with multiple columns"。在选项卡 "Layout" 上,将宽度设置为仅适合部分 (~page width/3) 中的 3 列。
在 B 部分使用部分专家。标记 "format with multiple columns"。在选项卡 "Layout" 上,将宽度设置为仅适合部分 (~page width/4) 中的 4 列。
将您的字段放入两个详细信息部分。
进行必要的微调。
我不会更改第一个答案,因为它可能对其他人有用。
这是一个非常无聊的新解决方案,如果你没有想出更好的主意的话。我会写 3 列。您将需要适应 4 列(或者只是为 4 列创建另一个 rpt)。
忘记 "format with multiple columns" 选项。只需创建一个正常的详细信息部分。
创建以下无聊的公式。我们称它为 "fieldsFiller":
shared stringvar address1;
shared stringvar address2;
shared stringvar address3;
shared stringvar name1;
shared stringvar name2;
shared stringvar name3;
shared stringvar surname1;
shared stringvar surname2;
shared stringvar surname3;
shared stringvar zip1;
shared stringvar zip2;
shared stringvar zip3;
shared stringvar city1;
shared stringvar city2;
shared stringvar city3;
//TODO do the same for the others fields you need
if recordnumber mod 3 = 1 then (
address1 := {YourDataSource.Address};
name1 := {YourDataSource.Name};
surname1 := {YourDataSource.Surname};
zip1 := {YourDataSource.Zip};
city1 := {YourDataSource.City};
//TODO do the same for the others fields you need
)
else if recordnumber mod 3 = 2 then (
address2 := {YourDataSource.Address};
name2 := {YourDataSource.Name};
surname2 := {YourDataSource.Surname};
zip2 := {YourDataSource.Zip};
city2 := {YourDataSource.City};
//TODO do the same for the others fields you need
)
else if recordnumber mod 3 = 0 then (
address3 := {YourDataSource.Address};
name3 := {YourDataSource.Name};
surname3 := {YourDataSource.Surname};
zip3 := {YourDataSource.Zip};
city3 := {YourDataSource.City};
//TODO do the same for the others fields you need
)
- 将 "fieldsFiller" 公式放在详细信息部分并取消它。
- 使用明细部分的部分专家根据以下公式抑制它:
recordnumber mod 3 > 0
- 这会太无聊...为您在 "fieldsFiller" 公式中声明的每个共享变量创建一个公式。例如,使用以下内容创建一个名为 "address1" 的公式:
shared stringvar address1;
address1;
- 将公式放在详细信息部分。将它们作为字段并排放置。
name1 surname1 name2 surname2 name3 surname3
address1 address2 address3
zip1 city1 zip2 city2 zip3 city3
- 试一试。
我在 crystal 报告中有一份报告显示了从数据库中获取的地址列表,格式如下:
`<some codes regarding object to send>
<Name> <Surname>
<Address>
<zip> <City>
<other informations>`
我需要以纯文本形式将这些地址打印成 3 或 4 列(根据用户选择)。 使用 PDF 报告没有问题,但如果我设置为纯文本,它只显示一列。 你能帮助我吗? 感谢和问候
总体思路是创建两个详细信息部分。一个有 3 列,另一个有 4 列。并显示或隐藏其中之一。
一步一步:
创建一个包含列数的参数。我们称它为 {?NumberOfColumns}。正如您所说,我假设它只能是 3 或 4。
创建两个详细信息部分:A 和 B。
当 {?NumberOfColumns} = 4 时,使用分区专家抑制详细分区 A。
当 {?NumberOfColumns} = 3 时,使用部分专家抑制详细部分 B。
在 A 部分使用部分专家。标记 "format with multiple columns"。在选项卡 "Layout" 上,将宽度设置为仅适合部分 (~page width/3) 中的 3 列。
在 B 部分使用部分专家。标记 "format with multiple columns"。在选项卡 "Layout" 上,将宽度设置为仅适合部分 (~page width/4) 中的 4 列。
将您的字段放入两个详细信息部分。
进行必要的微调。
我不会更改第一个答案,因为它可能对其他人有用。
这是一个非常无聊的新解决方案,如果你没有想出更好的主意的话。我会写 3 列。您将需要适应 4 列(或者只是为 4 列创建另一个 rpt)。
忘记 "format with multiple columns" 选项。只需创建一个正常的详细信息部分。
创建以下无聊的公式。我们称它为 "fieldsFiller":
shared stringvar address1; shared stringvar address2; shared stringvar address3; shared stringvar name1; shared stringvar name2; shared stringvar name3; shared stringvar surname1; shared stringvar surname2; shared stringvar surname3; shared stringvar zip1; shared stringvar zip2; shared stringvar zip3; shared stringvar city1; shared stringvar city2; shared stringvar city3; //TODO do the same for the others fields you need if recordnumber mod 3 = 1 then ( address1 := {YourDataSource.Address}; name1 := {YourDataSource.Name}; surname1 := {YourDataSource.Surname}; zip1 := {YourDataSource.Zip}; city1 := {YourDataSource.City}; //TODO do the same for the others fields you need ) else if recordnumber mod 3 = 2 then ( address2 := {YourDataSource.Address}; name2 := {YourDataSource.Name}; surname2 := {YourDataSource.Surname}; zip2 := {YourDataSource.Zip}; city2 := {YourDataSource.City}; //TODO do the same for the others fields you need ) else if recordnumber mod 3 = 0 then ( address3 := {YourDataSource.Address}; name3 := {YourDataSource.Name}; surname3 := {YourDataSource.Surname}; zip3 := {YourDataSource.Zip}; city3 := {YourDataSource.City}; //TODO do the same for the others fields you need )
- 将 "fieldsFiller" 公式放在详细信息部分并取消它。
- 使用明细部分的部分专家根据以下公式抑制它:
recordnumber mod 3 > 0
- 这会太无聊...为您在 "fieldsFiller" 公式中声明的每个共享变量创建一个公式。例如,使用以下内容创建一个名为 "address1" 的公式:
shared stringvar address1; address1;
- 将公式放在详细信息部分。将它们作为字段并排放置。
name1 surname1 name2 surname2 name3 surname3 address1 address2 address3 zip1 city1 zip2 city2 zip3 city3
- 试一试。