使用C#在Excel中复制图表

我有一个包含模板图表的电子表格。 在过去,我已经使用了复制/粘贴function,但是偶尔会遇到一个错误,那就是我在代码的同时将某些内容复制到剪贴板上,我想避免这种情况。 所以我看了一下Duplicate方法。 下面的代码应该工作吗? 该图表得到重复罚款。

我遇到的问题是,我不知道如何获取重复后的图表对象。 在这一行上:

ChartObject chart = (ChartObject)o; 

我得到这个错误:无法将types“System .__ ComObject”的COM对象转换为接口types“Microsoft.Office.Interop.Excel.ChartObject”。 这是我的代码:

 string file = @"D:\test.xlsx"; Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); app.Visible = true; ApplicationClass temp = new ApplicationClass(); Microsoft.Office.Interop.Excel.Workbook oBook; Microsoft.Office.Interop.Excel.Worksheet oSheet; oBook = app.Workbooks.Open(file, 0, false, 1, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true, true, XlCorruptLoad.xlNormalLoad); oSheet = oBook.Worksheets["template"] as Worksheet; object o = ((ChartObject)oSheet.ChartObjects("template")).Duplicate(); ChartObject chart = (ChartObject)o; chart.Name = "TEST"; 

我可以得到ChartObjects的数量吗? 如果我在macros中做这个工作,我可以用这一行来得到最后一个图表

 oSheet.ChartObjects(oSheet.ChartObjects.Count) 

有什么build议么? 我衷心感谢您的帮助。

谢谢,尼克

如果有人对我如何最终这样做感兴趣。 假设您有一个名为“模板”的工作表,并在该表上还有一个名为“模板”的图表。

 Microsoft.Office.Interop.Excel.Worksheet oTemplate = oBook.Worksheets["template"] as Worksheet; Microsoft.Office.Interop.Excel.Worksheet oOutput = oBook.Worksheets["output"] as Worksheet; // duplicate template chart ChartObject chartTemplate = (ChartObject)oTemplate.ChartObjects("template"); object o = chartTemplate.Duplicate(); ChartObject chart = (ChartObject)oTemplate.ChartObjects(GetChartCount(oTemplate)); public static int GetChartCount(Microsoft.Office.Interop.Excel.Worksheet oSheet) { int x = 0; foreach (Microsoft.Office.Interop.Excel.Shape s in oSheet.Shapes) { if (s.HasChart == MsoTriState.msoTrue) x++; } return x; } 

也许不是最好的方式,但它的工作原理。