我还是不知道有关stackoverflow的问题,完全改变问题的协议是什么,因为问题不是我原来的想法?

更新2013.07.17:我的一位同事发现这不是Crystal Reports程序与.NET中的Crystal Reports相比的问题,而是Excel与ExcelFormatted的问题 . 也就是说,当使用 File -> Export -> Export Report 的Crystal时,Microsoft Excel(97-2003)将产生此错误;但使用 File -> Export -> Export Report ,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中,并且我使用 File -> Export -> Export Report 并选择Typical(默认选项)时,生成的.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列不相同,但行组将显示上述问题 .

另外,我知道数据集具有正确的数据,因为如果我取消按下Details部分(以便显示@Concat公式),它将显示一个建筑连接,然后在Group Footer#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才能发生错误 .