繁体   English   中英

图表X轴日期和时间

[英]Chart X-Axis date and time

我使用EPPlus和C#创建一个Excel文档。 在内容工作表中,我有几行包含日期时间和一个值。 然后,我使用以下代码创建图表:

    var wsPressure = pck.Workbook.Worksheets.Add( "Pressure" );
    var chartPressure = wsPressure.Drawings.AddChart( "PressureChart", eChartType.Line );
    chartPressure.SetSize( 1280, 1024 );
    var serie1 = (ExcelLineChartSerie)chartPressure.Series.Add( "=Content!$A$2:$A$" + dataRow, "=Content!$D$2:$D$" + dataRow );
    serie1.Header = wsContent.Cells[1, 1].Value.ToString();

图表已打印,但时间浪费了。 因此,对于具有多个值的任何日子,都会绘制一条垂直线。 如果我在Excel中手动创建图表,则效果很好。 如何使用EPPlus做同样的事情?

样本数据:

A  B  C  D
1  -  -  01/01/2015
4  -  -  01/01/2015
2  -  -  01/02/2015
3  -  -  01/03/2015
6  -  -  01/03/2015
5  -  -  01/03/2015

这里有问题的数据是2015年1月1日和2015年3月1日。 尤其是最后一个很难,因为中间的价值完全丧失了。

问题是在Excel中,折线图默认情况下会尝试确定它的x轴类型,并得出结论,它是Date类型,只适合您的情况。 如果然后在轴选项下将其更改为“文本”,它将把所有内容都视为类别并包括时间部分。 请注意,这不会按日期/时间差异“适当地”隔开它们,因此,例如1/1和1/2之间的距离将与1/2和1/6相同-这可能是您想要的,也可能不是。 无论哪种方式,我都看eAxisType在EPP中设置X eAxisType的选项,因为它是只读的,并且是在构造图表对象时设置的。 我想如果要弄乱它,就必须使用手动XML操作。

您是否正在绘制XY散点图? 这样的事情可能会为您提供所需的东西:

[TestMethod]
public void Chart_DateTime_Test()
{
    //http://stackoverflow.com/questions/28158702/chart-x-axis-date-and-time
    var existingFile = new FileInfo(@"c:\temp\temp.xlsx");
    if (existingFile.Exists)
        existingFile.Delete();

    using (var pck = new ExcelPackage(existingFile))
    {
        var wsContent = pck.Workbook.Worksheets.Add("Content");
        var wsPressure = pck.Workbook.Worksheets.Add("Pressure");

        //Some data
        wsContent.Cells["A1"].Value = "A";
        wsContent.Cells["B1"].Value = "B";
        wsContent.Cells["C1"].Value = "C";
        wsContent.Cells["D1"].Value = "D";

        wsContent.Cells["A2"].Value = 1;
        wsContent.Cells["A3"].Value = 4;
        wsContent.Cells["A4"].Value = 2;
        wsContent.Cells["A5"].Value = 3;
        wsContent.Cells["A6"].Value = 6;
        wsContent.Cells["A7"].Value = 5;

        wsContent.Cells["D2"].Value = new DateTime(2015, 1, 1, 8, 15, 0);
        wsContent.Cells["D3"].Value = new DateTime(2015, 1, 1, 15, 15, 0);
        wsContent.Cells["D4"].Value = new DateTime(2015, 1, 2, 8, 15, 0);
        wsContent.Cells["D5"].Value = new DateTime(2015, 1, 3, 8, 15, 0);
        wsContent.Cells["D6"].Value = new DateTime(2015, 1, 3, 15, 15, 0);
        wsContent.Cells["D7"].Value = new DateTime(2015, 1, 3, 20, 15, 0);

        const int dataRow = 7;

        const string FORMATDATE = "m/d/yy h:mm;@";
        wsContent.Cells[2, 4, dataRow, 4].Style.Numberformat.Format = FORMATDATE;

        //var chartPressure = wsPressure.Drawings.AddChart("PressureChart", eChartType.Line);
        var chartPressure = wsPressure.Drawings.AddChart("PressureChart", eChartType.XYScatterLines);
        chartPressure.SetSize(1280, 1024);

        //var serie1 = (ExcelLineChartSerie)chartPressure.Series.Add("=Content!$A$2:$A$" + dataRow, "=Content!$D$2:$D$" + dataRow);
        var serie1 = (ExcelScatterChartSerie)chartPressure.Series.Add(wsContent.Cells[2, 1, dataRow, 1], wsContent.Cells[2, 4, dataRow, 4]);
        serie1.Header = wsContent.Cells[1, 1].Value.ToString();

        pck.Save();
    }
}

暂无
暂无

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

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