С# EPPlus, как создать линейную диаграмму с пунктирной линией

В течение последних 2 дней я столкнулся с проблемой линейной диаграммы с EPPlus. Моя цель - создать линейную диаграмму с EPPlus, а стиль линии будет пунктирной линией, как показано ниже. картинка прилагается.

Я много искал в Google в течение 2 дней, но до сих пор не получил подходящего намека на пунктирную линию на диаграмме. Я не уверен, что EPPlus вообще поддерживает пунктирную линию. Я использую EPPlus версии 6.0 и .NET Framework версии 4.8. Это пример кода, который создает диаграмму на листе Excel с одной строкой, но мне нужно, чтобы эта строка была пунктирной. пожалуйста, кто-нибудь увидит мой код и скажите мне, чего не хватает в моем коде, для которого я не мог использовать штриховой стиль линейной диаграммы.

ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
var newFile = new FileInfo(filepath);
using (ExcelPackage xlPackage = new ExcelPackage(newFile))
{
    ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets.Add("test");
    worksheet.Cells["A1"].Value = 1;
    worksheet.Cells["A2"].Value = 2;
    worksheet.Cells["A3"].Value = 3;
    worksheet.Cells["A4"].Value = 4;
    worksheet.Cells["A5"].Value = 5;
    worksheet.Cells["A6"].Value = 6;

    worksheet.Cells["B1"].Value = 10000;
    worksheet.Cells["B2"].Value = 10100;
    worksheet.Cells["B3"].Value = 10200;
    worksheet.Cells["B4"].Value = 10150;
    worksheet.Cells["B5"].Value = 10250;
    worksheet.Cells["B6"].Value = 10200;

    //ExcelChart chart = worksheet.Drawings.AddChart("LineChart", eChartType.XYScatterSmooth);
    ExcelChart chart = worksheet.Drawings.AddChart("LineChart", eChartType.XYScatterSmoothNoMarkers);
    chart.Series.Add(ExcelRange.GetAddress(1, 2, worksheet.Dimension.End.Row, 2),
                ExcelRange.GetAddress(1, 1, worksheet.Dimension.End.Row, 1));

    var Series = chart.Series[0];
    //chart.Axis[0].MinorGridlines.Fill.Color = Color.Red;
    //chart.Axis[0].MinorGridlines.LineStyle = eLineStyle.LongDashDot;
    chart.Axis[0].RemoveGridlines();
    chart.Axis[1].RemoveGridlines();
    chart.Axis[0].Border.LineStyle = eLineStyle.SystemDash;
    //chart.XAxis.Border.LineStyle = eLineStyle.Dash;
    chart.Series[0].Header = "Blah";
    //chart.Series[0].Border.LineStyle = eLineStyle.DashDot;
    //chart.Axis[0].Border.LineStyle = eLineStyle.Dash;
    
    xlPackage.Save();
    MessageBox.Show("Done");
}

Я также проверял этот пост, но не смог реализовать его в своем коде Office Open XML: рисование пунктирной линии на диаграмме

Пожалуйста, подтолкните меня в правильном направлении для достижения моей цели. Заранее спасибо.

Я не думаю, что в epplus есть такая функция, но вы можете обойти ее, напрямую отредактировав XML-документ серии и добавив <c:spPr><a:ln><a:prstDash val = "dash"/></a:ln></c:spPr> (см. learn.microsoft.com/en-us/dotnet/api/… для подробности)

Ilia Maskov 27.10.2022 23:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
122
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

У меня это работает с теми же версиями, что и у вас.
Вам нужно добавить ссылку на System.Drawing для цвета:

// ...(code above this line did not change)

ExcelChart chart = worksheet.Drawings.AddChart("LineChart", eChartType.XYScatterSmoothNoMarkers);
chart.Series.Add(
    ExcelRange.GetAddress(1, 2, worksheet.Dimension.End.Row, 2),
    ExcelRange.GetAddress(1, 1, worksheet.Dimension.End.Row, 1));

chart.Series[0].Header = "Blah";

// Add this:
chart.Series[0].Border.LineStyle = OfficeOpenXml.Drawing.eLineStyle.Dash;
chart.Series[0].Border.Width = 2;
chart.Series[0].Border.Fill.Color = System.Drawing.Color.Blue;

chart.Axis[0].RemoveGridlines();
chart.Axis[1].RemoveGridlines();

xlPackage.Save();

Результат:

#региональная сводка 4 Рабочий лист ExcelWorksheet4 = p.Workbook.Worksheets.Add("График(4)"); var summary_Chart_four = Worksheet4.Drawings.AddChart("диаграмма", eChartType.LineMarkers); // var summary_Chart_four = Worksheet4.Drawings.AddChart("chart", eChartType.XYScatterLines) as ExcelScatterChart;

            //var summary_Chart_four = Worksheet4.Drawings.AddChart("chart", (eChartType)System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash);
            //var summary_Chart_four = myWorksheet.Drawings.AddChart("chart", (eChartType)System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash);
            summary_Chart_four.ShowDataLabelsOverMaximum = true;
            Worksheet4.Cells.Style.Font.Name = "Arial";
            Worksheet4.Cells.Style.Font.Size = 10;
            Worksheet4.Cells.Style.Font.Bold = false;
            loopCnt = 0;
            for (int i = 0; i < (cVM.PeerGroups.Count + cVM.IndexGroups.Count) * 4; i += 4)
            {
                int rowIndex = 10 + i;
                int endRowIndex = 14 + i;
                string startingColumn_series = "C" + rowIndex;
                string endColumn_series = column + rowIndex;
                string lastColumn_xaxis = column + 6;
                int headerRowIndex = 9 + i;
                string seriesHeader = "A" + headerRowIndex;
                var series_i = summary_Chart_four.Series.Add(myWorksheet_summary_data.Cells[startingColumn_series + ":" + endColumn_series], myWorksheet_summary_data.Cells["C6:" + lastColumn_xaxis]);//working
                series_i.Header = myWorksheet_summary_data.Cells[seriesHeader].Value.ToString();
                summary_Chart_four.YAxis.Font.Size = 10;
                summary_Chart_four.XAxis.Font.Size = 10;
                //summary_Chart_four.XAxis.Format =DateTime.Now.Year.ToString();
                summary_Chart_four.YAxis.Format = "$0";

                if (loopCnt == 0)
                {
                    string LineColor = "#000080";
                    series_i.Border.LineStyle = eLineStyle.Solid;
                    //series_i.LineColor = LineColor.ConvertToColor();
                    //series_i.LineWidth = 2.0;
                    //series_i.Marker.Style = eMarkerStyle.Diamond;
                    //series_i.Marker.Size = 8;
                    //string BGColor = "#99ccff";
                    //series_i.Marker.Fill.Color = BGColor.ConvertToColor();
                    //string strBorderColor = "#000080";
                    //series_i.Marker.Border.Fill.Color = strBorderColor.ConvertToColor();
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).LineColor = LineColor.ConvertToColor();
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).LineWidth = 2.0;
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Style = eMarkerStyle.Diamond;
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Size = 8;
                    string BGColor = "#99ccff";
                    //((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Border.LineCap
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Fill.Color = BGColor.ConvertToColor();
                    string strBorderColor = "#000080";
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Border.Fill.Color = strBorderColor.ConvertToColor();
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Border.Width = 0.75;
                }
                else if (loopCnt == 1)
                {
                    string LineColor = "#003300";
                    series_i.Border.LineStyle = eLineStyle.LongDash;
                    //series_i.LineColor = LineColor.ConvertToColor();
                    //series_i.LineWidth = 2.0;
                    //series_i.Marker.Style = eMarkerStyle.Square;
                    ////((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Style = eMarkerStyle.Dash;
                    //series_i.Marker.Size = 7;
                    string BGColor = "#c0c0c0";
                    //series_i.Marker.Fill.Color = BGColor.ConvertToColor();
                    //string strBorderColor = "#003300";
                    //series_i.Marker.Border.Fill.Color = strBorderColor.ConvertToColor();

                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).LineColor = LineColor.ConvertToColor();
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).LineWidth = 2.0;
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Style = eMarkerStyle.Square;
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Size = 7;
                    //((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Border.LineCap
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Fill.Color = BGColor.ConvertToColor();
                    string strBorderColor = "#003300";
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Border.Fill.Color = strBorderColor.ConvertToColor();
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Border.Width = 0.75;

                }

                else if (loopCnt == 2)
                {
                    string LineColor = "#F79646";
                    series_i.Border.LineStyle = eLineStyle.Dot;
                    ////series_i.LineColor = LineColor.ConvertToColor();
                    ////series_i.LineWidth = 2.0;
                    ////series_i.Marker.Style = eMarkerStyle.Circle;
                    //////((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Style = eMarkerStyle.Dot;
                    ////series_i.Marker.Size = 8;
                    string BGColor = "#ccffcc";
                    ////series_i.Marker.Fill.Color = BGColor.ConvertToColor();
                    string strBorderColor = "#F79646";
                    ////series_i.Marker.Border.Fill.Color = strBorderColor.ConvertToColor();
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).LineColor = LineColor.ConvertToColor();
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).LineWidth = 2.0;
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Style = eMarkerStyle.Circle;
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Size = 8;
                    //((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Border.LineCap
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Fill.Color = BGColor.ConvertToColor();
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Border.Fill.Color = strBorderColor.ConvertToColor();

                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Border.Width = 0.75;


                }
                else if (loopCnt == 3)
                {
                    string LineColor = "#c0504d";
                    series_i.Border.LineStyle = eLineStyle.LongDashDotDot;
                    ////series_i.LineColor = LineColor.ConvertToColor();
                    ////series_i.LineWidth = 2.0;
                    ////series_i.Marker.Style = eMarkerStyle.Triangle;
                    //////((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Style = eMarkerStyle.Dot;
                    ////series_i.Marker.Size = 8;
                    string BGColor = "#c0504d";
                    ////series_i.Marker.Fill.Color = BGColor.ConvertToColor();
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).LineColor = LineColor.ConvertToColor();
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).LineWidth = 2.0;
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Style = eMarkerStyle.Triangle;
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Size = 8;
                    //((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Border.LineCap
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Fill.Color = BGColor.ConvertToColor();
                    string strBorderColor = "#003300";
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Border.Fill.Color = strBorderColor.ConvertToColor();
                    ((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Border.Width = 0.75;

                }

                //else if (loopCnt == 4)
                //{
                //    string LineColor = "#c0504d";
                //    series_i.Border.LineStyle = eLineStyle.LongDashDotDot;
                //    series_i.LineColor = LineColor.ConvertToColor();
                //    series_i.LineWidth = 1.5;
                //    series_i.Marker.Style = eMarkerStyle.Square;
                //    //((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Marker.Style = eMarkerStyle.Dot;
                //    series_i.Marker.Size = 8;
                //    string BGColor = "#c0504d";
                //    series_i.Marker.Fill.Color = BGColor.ConvertToColor();

                //}
                else
                {
                    ////series_i.LineColor = System.Drawing.Color.Aqua;
                    ////series_i.LineWidth = 1.5;
                    ////series_i.Marker.Style = eMarkerStyle.Circle;
                    ////series_i.Marker.Size = 8;
                    ////series_i.Marker.Fill.Color = System.Drawing.Color.Aqua;
                }
                //series_i.Smooth = eLineStyle.Dash;
                //((OfficeOpenXml.Drawing.Chart.ExcelLineChartSerie)series_i).Series=eChartType.d


                loopCnt++;
            }


            //var series_four = summary_Chart_four.Series.Add(myWorksheet_summary_data.Cells["C10:" + lastColumn_series1], myWorksheet_summary_data.Cells["C6:" + lastColumn_xaxis]);//working
            //series_four.Header = myWorksheet_summary_data.Cells["A9"].Value.ToString();

            //var series_four1 = summary_Chart_four.Series.Add(myWorksheet_summary_data.Cells["C14:" + lastColumn_series2], myWorksheet_summary_data.Cells["C6:" + lastColumn_xaxis]);

            //series_four1.Header = myWorksheet_summary_data.Cells["A13"].Value.ToString();




            summary_Chart_four.Border.Fill.Color = System.Drawing.Color.Black;
            //summary_Chart_four.Title.Text = "Comparison of " + cVM.YearsBack + " Year Cumulative Total Return" + Environment.NewLine + " Assumes Initial Investment of $100" + Environment.NewLine + strMonth + " " + strSelectedDt.Year;
            summary_Chart_four.Title.Text = "COMPARISON OF CUMULATIVE TOTAL RETURN";
            summary_Chart_four.SetSize(960, 600);
            // Add to 6th row and to the 6th column
            summary_Chart_four.Legend.Font.Size = 10;
            ((OfficeOpenXml.Drawing.Chart.ExcelChartStandard)summary_Chart_four).Legend.Font.SetFromFont("Calibri", 11, false, false, false, false);
            ((OfficeOpenXml.Drawing.Chart.ExcelChartStandard)summary_Chart_four).YAxis.Font.SetFromFont("Arial", 10, false, false, false, false);
            ((OfficeOpenXml.Drawing.Chart.ExcelChartStandard)summary_Chart_four).XAxis.Font.SetFromFont("Arial", 10, false, false, false, false);
            ((OfficeOpenXml.Drawing.Chart.ExcelChartStandard)summary_Chart_four).Title.Font.Bold = true;
            ((OfficeOpenXml.Drawing.Chart.ExcelChartStandard)summary_Chart_four).Title.Font.SetFromFont("Calibri", 16, false, false, false, false);
            //summary_Chart_four.Legend.Border.Fill.Color = System.Drawing.Color.Black;
            summary_Chart_four.SetPosition(0, 0, 0, 0);
            summary_Chart_four.XAxis.MajorTickMark = eAxisTickMark.In;
            //summary_Chart.XAxis.MajorTickMark = eAxisTickMark.In;
            summary_Chart_four.XAxis.MinorTickMark = eAxisTickMark.None;
            summary_Chart_four.YAxis.MinorTickMark = eAxisTickMark.None;
            summary_Chart_four.Legend.Position = eLegendPosition.Top;
            summary_Chart_four.YAxis.CrossBetween = eCrossBetween.MidCat;
            summary_Chart_four.XAxis.MajorGridlines.CompoundLineStyle = eCompundLineStyle.Double;

Другие вопросы по теме