C# 在EPPlus中更改线条系列的颜色

C# 在EPPlus中更改线条系列的颜色,c#,epplus,epplus-4,C#,Epplus,Epplus 4,有没有更简单的方法来改变线条的颜色 我试着用它。但是serieNode正在serieNode.AppendChild(spPr)处生成NullReferenceException 以下是生成图形的代码: private void GenerateLicenseUsageStatsChart(FileInfo excelFileInfo, FileInfo csvFileInfo, DateTime lastC

有没有更简单的方法来改变线条的颜色

我试着用它。但是
serieNode
正在
serieNode.AppendChild(spPr)处生成
NullReferenceException

以下是生成图形的代码:

private void GenerateLicenseUsageStatsChart(FileInfo excelFileInfo, FileInfo 
                                           csvFileInfo, DateTime lastCheckedDate)
    {
        string worksheetsName = "Sheet1";
        const bool firstRowIsHeader = false;

        var excelTextFormat = new ExcelTextFormat { Delimiter = ',' };
        // excelTextFormat.EOL = "\r";

        using (ExcelPackage package = new ExcelPackage(excelFileInfo))
        {
            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(worksheetsName);

            worksheet.Cells["A1"].LoadFromText(csvFileInfo, excelTextFormat, 
                      OfficeOpenXml.Table.TableStyles.None, firstRowIsHeader);

            var workbook = package.Workbook;
            ExcelWorksheet workSheet = workbook.Worksheets[1];

            var chart = workSheet.Drawings.AddChart("chart", 
                                              eChartType.ColumnClustered);
            chart.SetPosition(10, 250);
            chart.SetSize(700, 500);
            chart.Title.Text = $"LicenseUsageStats {lastCheckedDate:MMM} 
                         {lastCheckedDate.Year}";

            chart.YAxis.MajorUnit = 1;
            chart.YAxis.MinorUnit = 1;

            chart.XAxis.MajorTickMark = eAxisTickMark.None;
            chart.XAxis.MinorTickMark = eAxisTickMark.None;
            chart.XAxis.Title.Text = "Hour";
            chart.XAxis.Title.Font.Size = 10;

            var maxLicensesSerie = chart.Series.Add("B2:B25", "A2:A25");
            maxLicensesSerie.Header = "Max Licenses Used";

            var avgLicensesSerie = chart.Series.Add("C2:C25", "A2: A25");
            avgLicensesSerie.Header = "Avg Licenses Used";

            var maxLineChart = (ExcelLineChart) 
                            chart.PlotArea.ChartTypes.Add(eChartType.Line);
            var maxThreshLineSerie = maxLineChart.Series.Add("D2:D25", 
                                                             "A2:A25");
            maxThreshLineSerie.Header = "Max";

            SetLineChartColor(maxLineChart, 0, Color.Red);

            var warningLineChart = 
             (ExcelLineChart)chart.PlotArea.ChartTypes.Add(eChartType.Line);
            var warningThreshLineSerie = 
                 warningLineChart.Series.Add("E2:E25", "A2:A25");
            warningThreshLineSerie.Header = "Warning";

            SetLineChartColor(warningLineChart, 1, Color.Yellow);

            worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();

            // workSheet.Column(4).Hidden = true;
            // workSheet.Column(5).Hidden = true;

            package.Save();
        }
    }
我的最终目标:


因为excel没有创建水平线的简洁方法,所以我创建了max和warning列。我也想隐藏这些列,而不影响图形。也许我可以通过将它们移到另一张纸来“隐藏”它们?

我看到了问题所在。该函数假定序列的索引与图表对象集合中的序列数匹配。但是,由于它是一个混合图表,所以在对
Add
的结果进行强制转换后,情况并非如此。这是一个有点黑客,但它会工作(我真的应该更努力地思考如何匹配数字):

你可以这样称呼它:

maxLineChart.SetLineChartColor(2, 0, Color.Red);
warningLineChart.SetLineChartColor(3, 0, Color.Yellow);

你试过这个吗:得到同样的错误你能发布你的更新代码吗?谢谢!知道我该如何隐藏Max和Warning列吗?我只是用它们在图形上创建阈值线。这是有效的:
工作表。列(4)。Style。Font。Color。SetColor(Color。White)
工作表.列(5).样式.字体.颜色.设置颜色(颜色.白色)但是,如果你发现更好的东西,请告诉我。@HelloWorld,这是一个困难的问题-我一直不明白为什么excel从不将其作为一项功能添加。我一直在做你所做的,通过添加“虚拟”线数据作为他们自己的系列。将它们移动到您提到的隐藏工作表中通常效果很好。@HelloWorld我使用了
worksheet.Column(4)。hidden=true;chart.ShowHiddenData=true用于隐藏列。
maxLineChart.SetLineChartColor(2, 0, Color.Red);
warningLineChart.SetLineChartColor(3, 0, Color.Yellow);