Ik maak een programma die een Excel document met een grafiek moet genereren. Voor Office2007 werkt de volgende code perfect:
Wanneer deze code op een pc wordt gedraaid waar Office 2003 op geïnstalleerd is, krijg ik een foutmelding in regel 80. Dit stukje code:
De melding betreft een InvalidCastException. OleAut heeft niet overeenkomende typen gerapporteerd.
Heeft iemand een idee hoe ik dit werkend krijg op een machina waar Office 2003 is geïnstalleerd?
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
| Microsoft.Office.Interop.Excel.Application xla; public Graph() { xla = new Microsoft.Office.Interop.Excel.Application(); } //Generate a graph of the efficiance hours of BE from the given year public void generateGraphEfficiancyBE(string year, string selectedGraph) { List<char> alphabet = new List<char>(); // Get all letter of the alphabet for cell letters in Excel for (int x = 97; x <= 122; x++) { alphabet.Add(Convert.ToChar(x)); } string[] labels = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; //string[] yAxis = { "2000", "3000", "4000", "5000", "6000", "7000", "8000", "9000" }; double[] budget = new double[12]; double[] normuren = new double[12]; double[] verschil = new double[12]; // Get differences between the werkelijk and budget for (int x = 0; x < 12; x++) { budget[x] = 32 + x * 2 ^ 3; normuren[x] = 32 + x * 2 ^ 5; verschil[x] = normuren[x] - budget[x]; } //Worksheet shizzle xla = new Microsoft.Office.Interop.Excel.Application(); Workbook wb = xla.Workbooks.Add(XlSheetType.xlWorksheet); Worksheet ws = (Worksheet)xla.ActiveSheet; ChartObjects chartObjs = (ChartObjects)ws.ChartObjects(Type.Missing); ChartObject chartObj = chartObjs.Add(0, 0, 1100, 400); Chart xlChart = chartObj.Chart; // Het bepalen van de reeks waar de grafiek mee gevuld moet worden Range rg; //Namen van gegegevens rg = ws.get_Range("A1", alphabet[labels.Length - 1] + "1"); rg.Value2 = labels; rg.Columns.AutoFit(); //Waarden van budget rg = ws.get_Range("A2", alphabet[budget.Length - 1] + "2"); rg.Value2 = budget; rg.Columns.AutoFit(); //Waarden van normuren rg = ws.get_Range("A3", alphabet[normuren.Length - 1] + "3"); rg.Value2 = normuren; rg.Columns.AutoFit(); //Waarden van verschil rg = ws.get_Range("A4", alphabet[verschil.Length - 1] + "4"); rg.Value2 = verschil; rg.Columns.AutoFit(); // Tekenen van de grafiek xlChart.ChartType = XlChartType.xlLine; xlChart.SetSourceData(rg, Type.Missing); xlChart.HasTitle = true; xlChart.ChartTitle.Text = "Uren O&T ontwikkeling Lang & Kort " + selectedGraph + " " + year; xlChart.HasLegend = true; xlChart.PlotArea.Top = 100; xlChart.PlotArea.Height = 200; xlChart.PlotArea.Width = 500; xlChart.PlotArea.Interior.Color = ColorTranslator.ToOle(Color.White); xlChart.PlotArea.Border.Color = ColorTranslator.ToOle(Color.White); SeriesCollection series = xlChart.SeriesCollection(System.Type.Missing) as SeriesCollection; //Here "A2;x2" will be the range containing the data Series serie = series.Add(ws.get_Range("A2", alphabet[budget.Length - 1] + "2"), XlRowCol.xlRows, false, false, false); //and "A1;x" will be the range containing the labels serie.XValues = ws.get_Range("A1", alphabet[budget.Length - 1] + "1"); //serie.AxisGroup = XlAxisGroup.xlPrimary; serie.Name = "Gebudgetteerd"; serie = series.Add(ws.get_Range("A3", alphabet[normuren.Length - 1] + "3"), XlRowCol.xlRows, false, false, false); serie.XValues = ws.get_Range("A1", alphabet[normuren.Length - 1] + "1"); serie.ChartType = XlChartType.xlColumnClustered; serie.Name = "Werkelijk"; serie = series.Add(ws.get_Range("A4", alphabet[verschil.Length - 1] + "4"), XlRowCol.xlRows, false, false, false); serie.XValues = ws.get_Range("A1", alphabet[verschil.Length - 1] + "1"); serie.ChartType = XlChartType.xlColumnClustered; serie.Name = "Verschil"; // Delete the default series (Reeks) series.Item(1).Delete(); // X and Y axes names Microsoft.Office.Interop.Excel.Axis yax; yax = (Microsoft.Office.Interop.Excel.Axis)xlChart.Axes(Microsoft.Office.Interop.Excel.XlAxisType.xlValue, Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary); yax.HasTitle = true; yax.AxisTitle.Text = "Uren O&T per maand"; Microsoft.Office.Interop.Excel.Axis xax; xax = (Microsoft.Office.Interop.Excel.Axis)xlChart.Axes(Microsoft.Office.Interop.Excel.XlAxisType.xlCategory, Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary); xax.HasTitle = true; xax.AxisTitle.Text = "Maand"; xla.Visible = true; } |
Wanneer deze code op een pc wordt gedraaid waar Office 2003 op geïnstalleerd is, krijg ik een foutmelding in regel 80. Dit stukje code:
C#:
1
2
| //Here "A2;x2" will be the range containing the data Series serie = series.Add(ws.get_Range("A2", alphabet[budget.Length - 1] + "2"), XlRowCol.xlRows, false, false, false); |
De melding betreft een InvalidCastException. OleAut heeft niet overeenkomende typen gerapporteerd.
Heeft iemand een idee hoe ik dit werkend krijg op een machina waar Office 2003 is geïnstalleerd?