关于stackoverflow的问题我还是新手,完全改变问题的协议是什么,因为这个问题不是我原来的想法?
更新2013.07.17:我的一位同事发现,这不是Crystal Reports程序与.NET中的Crystal Reports相比的问题,而是Excel与ExcelFormatted的问题。也就是说,在Crystal中使用文件 - >出口 - >导出报告,Microsoft Excel(97-2003)将产生此错误;但使用文件 - >出口 - >导出报告,Microsoft Excel(97-2003)DataOnly不会产生此错误。类似地,在.NET中,使用ExportFormatType.Excel枚举值会产生此错误,但使用ExportFormatType.ExcelRecord则不会。我很确定下一步是与SAP交谈。
使用Crystal Reports中的“导出报告”选项与使用.NET应用程序中的ExportToDisk方法时,我得到的数据结果不同。另外值得注意的是,我使用3公式技巧来对字段进行连接。
Crystal Reports程序中的about告诉我,我正在使用Crystal Reports 2008,12.1.0.892 .NET中的Crystal Reports DLL版本为12.0.2000.0,使用的是VS2005,VB.NET,.NET 2.0 Framework
Crystal Report后面的数据集(通过直接在RPT中使用SQL的数据库字段)以下列格式返回数据:
Number Letter
1 A
1 B
1 C
2 A
3 A
3 B
Crystal Report的设计使用3 Formula技巧将Letter字段汇总到逗号分隔列表中,并输出以下内容:
Number Letter
1 A, B, C
2 A
3 A, B
我用来做这个的公式如下
@Reset:(放置在群组标题#1中,已取消)
WhilePrintingRecords;
StringVar AllLetters := ' ';
@Concat:(置于详细信息中,已取消)
WhilePrintingRecords;
StringVar AllLetters;
if AllLetters = ' ' then
AllLetters := {Command.Letter}
else
AllLetters := AllLetters + ', ' + {Command.Letter}
@Display (放置在组页脚#1中)
WhilePrintingRecords;
StringVar AllLetters;
当我在Crystal Reports中时,我使用文件 - >出口 - >导出报告并选择典型(默认选项)生成的.xls文件具有正确的输出。
当我使用以下代码从.NET调用ExportToDisk时:
Dim rd As New CrystalDecisions.CrystalReports.Engine.ReportDocument
rd.load("D:\test.rpt")
rd.DataSourceConnections(0).SetLogon(user, password)
rd.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.Excel, "D:\test.xls")
生成的.xls文件具有以下输出:
Number Letter
1 A, B
2 A, B
3 A, B
似乎它正在为公式的每个版本使用@Display的最后一个值,这是我对Crystal Reports如何评估公式的理解是不可能的。在存在更多行的实际问题中,整个报表的Letter列不同,但行组将显示上述问题。
此外,我知道数据集具有正确的数据,因为如果我取消按下详细信息部分(以便显示@Concat公式),它将显示建筑物连接,然后在组页脚#1中显示错误的数据
Number Letter
1 A
1 A, B
1 A, B, C
1 A, B 'This is the Footer
2 A
2 A, B 'This is the Footer
3 A
3 A, B
3 A, B 'This is the Footer
所以经过那么长时间的解释之后,有谁知道发生了什么?
编辑2013.07.16:一些额外的信息来自于搞乱这一点。它似乎与连接的长度相关联,特别是255个字符(这是一个可疑数字)。所以我现在能够重现这个并操纵数据集来获取错误或者没有得到错误。另外值得注意的是,两个连续组的连接必须超过255才能发生错误。