我有大约 700 份水晶 XI 报告,其中一些在公式字段名称 中包含右大括号,例如“ Test } ”。尽管 Crystal Reports XI 可以打开所有这些报表,但 C# 在尝试加载此类报表时会崩溃。
这是我用来加载报告的代码(对于其他报告工作正常)
CrystalDecisions.CrystalReports.Engine.ReportDocument reportDocument;
reportDocument = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
reportDocument.Load(path); //Application crashes here
抛出以下异常:
A first chance exception of type 'System.Exception' occurred in
CrystalDecisions.CrystalReports.Engine.dll
Load report failed
Invalid field name
所以我的问题是是否有可能无论如何加载这些报告?如果没有,新版本的水晶报表 DLL 是否能够加载旧报表?
有关该问题的一些进一步信息:
我正在使用 Visual Studio 2012 C# .NET 4.5,平台目标设置为 x86
至于 Crystal DLL,我使用版本 11.0.3300
令人惊讶的是,C# 在加载包含左大括号或许多其他特殊字符的字段名称的报告时没有任何问题:
“ Test } ”或“ {Test} ” - 错误
“ {Test ”或“ Test { ” - 加载没有问题 - 所以打开大括号工作正常
“ ” Test < >= % & |” ” - 加载也没有任何问题(是的,名称包含双引号)
编辑:由于不可避免的混淆:
请记住,问题在于公式字段名称而不是公式本身。示例图像:
-> 目前我只看到一个解决方案,因为问题似乎是 API 和 C# 的组合:重命名所有公式字段名称并删除括号
原始异常消息:
{"Der Bericht konnte nicht geladen werden."} //Load report failed
Data: {System.Collections.ListDictionaryInternal}
HelpLink: null
HResult: -2146233088
InnerException: {"\rUngültiger Feldname.\nC:\\Users\\username\\AppData\\Local\\Temp\\
{566E74ED-58BF-40CD-82B2-9AE0E6BC4013}.rpt"} //Invalid field name
Message: "Der Bericht konnte nicht geladen werden."
Source: "CrystalDecisions.CrystalReports.Engine"
StackTrace: " at
CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() \r\n at
CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename,
OpenReportMethod openMethod, Int16 parentJob)\r\n at
CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename) \r\n at
CRTableLister.ReportAnalyzer.analyzeReport(String path)"
TargetSite: {Void EnsureDocumentIsOpened()}