ExcelexceptionHRESULT:ChartArea.Copy()中的0x800A03EC

我正在使用excel interop.dll v11.0与一个Excel实例交互的C#应用​​程序。 我正在使用下面的代码将图表从Excel工作表复制到剪贴板:

public Image ReadChart(Chart chartAccess) { try { Microsoft.Office.Interop.Excel.Worksheet sheet = workbook.Sheets[chartAccess.Sheet.Name]; Microsoft.Office.Interop.Excel.ChartObject chart = sheet.ChartObjects(chartAccess.Name); chart.Chart.ChartArea.Copy(); // exception gets thrown here return System.Windows.Forms.Clipboard.GetImage(); } catch (COMException) { // display error dialog etc... } 

这与Excel 2007工作正常。但是,由于切换到Excel 2013函数ChartArea.Copy()导致以下COMExceptions被引发:

 Message: "Dimension not valid for chart type" Stack Trace: System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) Microsoft.Office.Interop.Excel.ChartArea.Copy() Message: "HRESULT: 0x800A03EC" Stack Trace: System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) Microsoft.Office.Interop.Excel.ChartArea.Copy() 

这只发生在旧的.xls格式的Excel表格中,xlsm / xlsx文件工作正常。 使用较新版本的interop.dll(v14.0和v15.0)没有帮助。

任何帮助表示赞赏!

编辑:

我使用以下解决方法解决了问题:

 // ... chart.Chart.activate(); chart.Chart.Export(filename, "PNG", false); using (Stream reader = File.OpenRead(filename)) { image = Image.fromStream(stream); } return image; 

复制的文档显示版本2003和2010之间是有区别的。

2003:

 void Copy( [In, Optional] object Before, [In, Optional] object After ); 

2010:

 void Copy( Object Before, Object After ) 

正如你所看到的,参数在2003年是可选的,在以后的版本中是强制性的。