繁体   English   中英

具有多系列的 C# Excel 互操作图表 - X 轴作为日期时间

[英]C# Excel Interop Charts with multi series - X axis as DateTime

我有一个用 C# 实现的 excel 插件。 这将连接到服务器并获得 <key, value1, value2, value3..> 对,其中 key 是 DateTime。 获取数据后,将填充到 Excel 工作表中。 此数据用于绘制多系列折线图。 我正在使用 ChartWizard 并在 Chart 对象上使用 .NewSeries 选项添加多个系列。 指定我的 X 轴是 DateTime 的最佳方法是什么。 当我使用 ScatterLines 或 XLines 时,我发现行为有所不同。 我无法找到一种方法,我可以对图表说我的 X 轴是 DateTime 并将日期格式指定为相同的任何帮助将不胜感激。 维克龙

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;

找到了,如果不是最好的,对我有用的东西。 当我使用格式化为所需日期时间显示模式的 DateTime 进行填充时,单元格类型被设置为“常规”,当然,该值被视为“字符串”,这个 xlLines 确实工作得很好。 那么问题在于,当单元格更新为“字符串”时,用户将无法将 DateTime 格式修改为不同的显示模式。 现在,我使用 C# DateTime 对象填充 Excel 单元格。 我将格式设置为

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

在 Excel 中获取精确的 NumberFormat 格式 Axis=>Number=>Category=>Format Code 属性。 这将使 Excel 将类型视为时间,用户可以修改日期时间格式。 然后,我修改为 xlXLScatterLines,修改 Tickspaces 如下:

            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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM