2010-05-13 46 views
1

我想寫一個程序在Excel中通過C#創建圖表。由C#創建Excel圖表的例外情況

我寫的程序,它在win7pro和Office 2007

正常工作,但是當我在一個系統與Windows XP SP(3)和Office 2003執行程序,它拋出以下錯誤:

Unhandled Exception: System.Runtime.InteropServices.COMException (0x800A03EC): Exception from HRESULT: 0x800A03EC 
    at Microsoft.Office.Interop.Excel._Chart.ChartWizard(Object Source, Object Gallery, Object Format, Object PlotBy, Object CategoryLabels, Object SeriesLabels, Object HasLegend, Object Title, Object CategoryTitle, Object ValueTitle, Object 
ExtraTitle) 
    at ConsoleApplication2.Report.createChart(Worksheet ws, String chartTitle, String xName, String yName) 
    at ConsoleApplication2.Report.createReport(List`1 data, String chartTitle, String xName, String yName) 
    at CreateExcelWorksheet.Main() 

這對我創建圖表的代碼如下:

protected void createChart(Worksheet ws,string chartTitle,string xName,string yName) 
    { 
     ChartObjects chartObjs = (ChartObjects)ws.ChartObjects(Type.Missing); 
     ChartObject chartObj = chartObjs.Add(100, 10, 300, 300); 
     Chart xlChart = chartObj.Chart;  
     Range rg; 
     rg = ws.get_Range(startCell,endCell);  
     xlChart.ChartWizard(rg, XlChartType.xlXYScatterSmooth, 1, XlRowCol.xlColumns, 0, 0, true, chartTitle, xName, yName, ""); 
    } 

和錯誤行是最後一個。

沒有人知道我該怎麼辦?

此外,當我用下面的行替換最後一行程序工作,但我需要設置一些屬性,如xName和yName和ChartTitle的圖表。有誰知道我該怎麼做?

xlChart.ChartType = XlChartType.xlXYScatterSmoothNoMarkers; 
xlChart.SetSourceData(rg, Type.Missing); 

謝謝

回答

1

老兄我有同樣的問題沒有完整的答案。你走在正確的道路上,但你錯過了一些東西。

這是我最終結束這場辯論的解決方案,以便其他人不必像我一樣受苦。我不會進入細節上的一些對象的類型,但它應該是明確的:

oChart.HasTitle = true; 
oChart.ChartTitle.Text = "Chart Name"; 
oChart.ChartType = Excel.xlChartType.xlXYScatterSmooth; 
oChart.SetSourceData(oRange, Excel.xlRowCol.xlColumns); 

// This is the part you were missing 
Excel.Axis xAxis = (Excel.Axis)oChart.Axes(Excel.xlAxisType.XlCatergory, Excel.xlAxisGroup.xlPrimary); 
xAxis.HasTitle = true; 
xAxis.AxisTitle.Text = "x"; 

Excel.Axis yAxis = (Excel.Axis)oChart.Axes(Excel.xlAxisType.XlValue, Excel.xlAxisGroup.xlPrimary); 
yAxis.HasTitle = true; 
yAxis.AxisTitle.Text = "y"; 

好運

0

我想你將不得不使用後期綁定,同時支持Office 2003和2007年,因爲他們有不同版本的對象庫。

+0

我應該怎麼做呢? – JGC 2010-05-13 17:20:36