我正在使用excel interop.dll v11.0与Excel实例交互的C#应用程序。 我使用下面的代码图表复制从Excel工作表到剪贴板:Excel异常HRESULT:来自ChartArea.Copy的0x800A03EC()
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;
这是ERROR_INVALID_FLAGS,所以可能不会添加任何东西到第一个异常。由于它说维度,我建议看看ChartArea属性的值,例如高度和宽度来查看这两种情况下发生了什么,并且作为长时间拍摄,可能会尝试使用.Copy()之前的ChartArea.Select()? – Rup 2015-04-01 17:12:31