Graphiques d'interopo C # Excel avec multi-séries – axe X comme Date-time

J'ai un ajout Excel ajouté en C #. Cela se connecte à un server et obtient des paires, où Key est DateTime. Une fois datatables récupérées, elles sont remplies dans la feuille de calcul Excel. Ces données sont utilisées pour tracer le graphique linéaire multi-séries. J'utilise ChartWizard et sur l'object Graphique, j'ajoute plusieurs séries à l'aide de l'option .NewSeries. Quelle est la meilleure façon de spécifier que mon axe X est DateTime. Je vois que le comportement diffère lorsque j'utilise ScatterLines ou XLLines. Je ne peux pas find une approche où je peux dire au tableau que mon axe X est DateTime et spécifier un format de date à la même. Toute aide sera appréciée. Vikron

Microsoft.Office.Tools.Excel.Chart chart = worksheet.Controls.AddChart(0, 0, xx, yy, "Trend"); chart.ChartWizard(Type.Missing, Microsoft.Office.Interop.Excel.XlChartType.xlXYScatterLines, Type.Missing, XlRowCol.xlColumns, Type.Missing, Type.Missing, true, "Trend", "Time stamp", Type.Missing, Type.Missing); chart.AutoScaling = false; chart.ChartStyle = 34 chart.Legend.Position = XlLegendPosition.xlLegendPositionBottom; chart.HasTitle = true; chart.ChartType = XlChartType.xlXYScatterLines; chart.ChartTitle.Text = ""Trend"; foreach (series) { Excel.Series xlSeries = (Excel.Series)((Excel.SeriesCollection)chart.SeriesCollection()).NewSeries(); Microsoft.Office.Interop.Excel.Range seriesRange = worksheet.get_Range(series.seriesBeginRange, worksheet.get_Range(series.seriesBeginRange).get_End(XlDirection.xlDown)); xlSeries.Name = series.seriesName; xlSeries.XValues = timeSeriesRange; //This has datetime xlSeries.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlXYScatterLines; xlSeries.Values = seriesRange; } cell.NumberFormat = "MM/dd/yy HH:mm"; cell.Value = ts; 

Trouvé, sinon le meilleur, quelque chose qui fonctionne pour moi. Lorsque j'étais rempli avec DateTime au format de l'affichage de la date souhaitée, le type de cellule était réglé sur «Général» et, bien sûr, la valeur était traitée comme «Chaîne», cette xlLines fonctionnant parfaitement. Ensuite, le problème avec cela est que l'user ne pourra pas modifier le format DateTime dans un motif d'affichage différent car les cellules ont été mises à jour en tant que "Chaîne". Maintenant, je localise la cellule Excel avec l'object C # DateTime. J'ai configuré le format comme

 cell.NumberFormat = "m/d/yy h:mm;@"; 

Pour get le NumberFormat exact pour formater Axis => Number => Category => Format des propriétés de code dans Excel. Cela permettra à Excel de traiter le type en tant que time et l'user peut modifier le format de l'heure de la date. Ensuite, j'ai modifié pour xlXLScatterLines, modifié Tickspaces comme ci-dessous:

  Axis xAxis = (Excel.Axis)chart.Axes(Excel.XlAxisType.xlCategory); TickLabels ticks = xAxis.TickLabels; xAxis.MinimumScale = timeSeriesRange.Value2[1, 1]; xAxis.MaximumScale = timeSeriesRange.Value2[timeSeriesRange.Count, 1]; xAxis.MajorTickMark = XlTickMark.xlTickMarkCross; xAxis.MinorTickMark = XlTickMark.xlTickMarkInside; xAxis.MajorUnit = 0.005; xAxis.HasMinorGridlines = true; xAxis.HasMajorGridlines = true; ticks.Orientation = XlTickLabelOrientation.xlTickLabelOrientationUpward; chart.PlotArea.Select(); chart.PlotArea.Height = 300;