Permalänk
Medlem

Skapa chart (excel) i c# -kod

Tänkte kolla om det finnes någon excel-guru tillgänglig?

Jag försöker slänga ihop en liten applikation som läser in data och sedan skapar ett excel-dokument utifrån dessa data, skrivet i C#. Stöter på problem med mina diagram. I vanliga fall använder jag funktionen att spela in macron och sedan översätta till c# men nu fungerar inte det så enkelt.

Har provat en del varianter av koden nedan, antar att det syns vad jag vill åstakomma:

Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing); Excel.Chart xlChart = (xlCharts.Add(0, 415, 500, 370)).Chart; xlChart.SeriesCollection(Type.Missing).NewSeries(); xlChart.SeriesCollection(1).Name = "Medalj"; xlChart.SeriesCollection(1).Values = xlWorkSheet.get_Range("E11", "E16"); xlChart.SeriesCollection(1).XValues = xlWorkSheet.get_Range("J11", "J16"); xlChart.SeriesCollection(1).ChartType = Excel.XlChartType.xlXYScatterSmooth; //allt fungerar bra hit... xlChart.SeriesCollection(Type.Missing).NewSeries(); xlChart.SeriesCollection(2).Name = "Under medel"; xlChart.SeriesCollection(2).Values = xlWorkSheet.get_Range("P11", "P16"); xlChart.SeriesCollection(2).XValues = xlWorkSheet.get_Range("J11", "J16"); xlChart.SeriesCollection(2).ChartType = Excel.XlChartType.xlArea; xlChart.SeriesCollection(Type.Missing).NewSeries(); xlChart.SeriesCollection(3).Name = "Final"; xlChart.SeriesCollection(3).Values = xlWorkSheet.get_Range("F11", "F16"); xlChart.SeriesCollection(3).XValues = xlWorkSheet.get_Range("J11", "J16"); xlChart.SeriesCollection(3).ChartType = Excel.XlChartType.xlArea; xlChart.SeriesCollection(Type.Missing).NewSeries(); xlChart.SeriesCollection(4).Name = "Över medel"; xlChart.SeriesCollection(4).Values = xlWorkSheet.get_Range("Q11", "Q16"); xlChart.SeriesCollection(4).XValues = xlWorkSheet.get_Range("J11", "J16"); xlChart.SeriesCollection(4).ChartType = Excel.XlChartType.xlArea;

Jag har totalt sju grafer jag vill samla under samma diagram. Denna kod är snarlik den som genereras av macroinspelningen, men fungerar inte. Kan inte heller placera exakt vad som är fel då felen blir olika beroende på vilken ordning instruktionerna utförs osv... Någon som har synpunkt på hur detta skall lösas, alternativt hjälpa mig söka på ett annat forum?

Om jag inte kan lösa problemet med mina diagram kommer jag få ett mastodontjobb att ändra 50 st blad manuellt (samt eventuellt göra om det igen om resultatet inte duger enligt "uppdragsgivaren").

ps. jag är helt självlärd och känner mig lite vilsen i excel-api:et

onödiga kommentarer i kod borttagna
Permalänk
Medlem

För tydlighetens skull skriver jag en ny post för min lösning:

Excel.Shape xlCharts = xlWorkSheet.Shapes.AddChart(Excel.XlChartType.xlXYScatterSmooth, 0, 335, 600, 380); Excel.Chart xlChart = xlCharts.Chart; Excel.Range rngYear = xlWorkSheet.get_Range("J11", "J16"); xlChart.SeriesCollection(1).Name = "Medalj"; xlChart.SeriesCollection(1).XValues = rngYear; xlChart.SeriesCollection(1).Values = xlWorkSheet.get_Range("E11", "E16"); xlChart.SeriesCollection(1).Interior.ColorIndex = COLOR_MEDAL; //osv... sju grafer till

Skillnaden är att jag använder Shapes.AddChart istället för ChartObjects men även där fick jag problem. Det stora problemet är fortfarande lite otydligt men jag kom fram till att minnesanvändningen var avgörande (antar att det var excel som kraschade), så jag la diagram-skapandet tidigt i koden och då gick det bra. Så nu kör jag mitt program med kod som enbart fungerar om jag kör diagram före jag sätter typsnitt och liknande... COM-objekt är kluriga.