How to create Excel high low close chart in C#, VB.NET?
This article explains how to create a high-low-close chart in Excel using Syncfusion Excel (XlsIO) library.
What is a high-low-close chart?
A high-low-close chart is a type of chart typically used to illustrate movements in the price of a financial instrument over time. Each vertical line on the chart shows the price range over one unit of time.
High-Low-Close Chart
To create a high-low-close chart in Excel using XlsIO, you need to do the following steps.
Steps to create high-low-close chart:
Step 1: Initialize chart
Create a chart object by calling the worksheet.Charts.Add method.
C#
//Create the chart
IChartShape chart = worksheet.Charts.Add();
Step 2: Assign data and specify the chart type
Set a range of data from the worksheet to chart’s DataRange property and specify the chart type to ExcelChartType.Stock_HighLowClose enum value.
C#
//Set region of Chart data
chart.DataRange = worksheet["A1:F4"];
//Set chart type to Stock_HighLowClose
chart.ChartType = ExcelChartType.Stock_HighLowClose;
For creating a stock high-low-close chart, the series count must be 3. The data range should be set before selecting the chart type.
Step 3: Apply basic chart elements
Add the basic elements like chart title, data labels and legend.
- ChartTitle of chart object.
- Set DataLabels via DefaultDataPoint.
- Set TRUE to chart’s HasLegend property, to show the legend.
C#
//Apply chart elements
//Set Chart Title
chart.ChartTitle = "High-Low-Close Chart";
//Set Legend
chart.HasLegend = true;
chart.Legend.Position = ExcelLegendPosition.Bottom;
//Set Datalabels
IChartSerie serie1 = chart.Series[0];
serie1.DataPoints.DefaultDataPoint.DataLabels.IsValue = true;
serie1.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = true;
serie1.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle;
serie1.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.LightGreen;
Properties used to modify the markers in the high-low-close chart
Below is the list of properties that are used to change the markers in high-low-close chart.
- MarkerBackgroundColor (or) MarkerBackgroundColorIndex
- MarkerForegroundColor (or) MarkerForegroungColorIndex
- MarkerSize
- MarkerStyle
- IsAutoMarkerNote:
Marker properties are applicable for all high (chart.Series[0]), low (chart.Series[1]) and close (chart.Series[2]) series.
To know more about creating charts with various settings using Syncfusion Excel (XlsIO) library, please refer the documentation.
The following C#/ VB.NET complete code snippet shows the creation of high-low-close chart using XlsIO.
C#
using Syncfusion.XlsIO;
using System.Reflection;
using System.IO;
namespace ChartSample
{
class Program
{
static void Main(string[] args)
{
using (ExcelEngine excelEngine = new ExcelEngine())
{
IApplication application = excelEngine.Excel;
application.DefaultVersion = ExcelVersion.Excel2016;
//Open existing workbook with data entered
Assembly assembly = typeof(Program).GetTypeInfo().Assembly;
Stream fileStream = assembly.GetManifestResourceStream("ChartSample.InputTemplate.xlsx");
IWorkbook workbook = application.Workbooks.Open(fileStream);
IWorksheet worksheet = workbook.Worksheets[0];
//Initialize chart and assign data
IChartShape chart = worksheet.Charts.Add();
chart.DataRange = worksheet["A1:F4"];
chart.ChartType = ExcelChartType.Stock_HighLowClose;
//Apply chart elements
//Set Chart Title
chart.ChartTitle = "High-Low-Close Chart";
//Set Legend
chart.HasLegend = true;
chart.Legend.Position = ExcelLegendPosition.Bottom;
//Set Datalabels
IChartSerie serie1 = chart.Series[0];
IChartSerie serie2 = chart.Series[1];
IChartSerie serie3 = chart.Series[2];
serie1.DataPoints.DefaultDataPoint.DataLabels.IsValue = true;
serie1.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = true;
serie1.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle;
serie1.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.LightGreen;
serie2.DataPoints.DefaultDataPoint.DataLabels.IsValue = true;
serie2.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = true;
serie2.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle;
serie2.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.Red;
serie3.DataPoints.DefaultDataPoint.DataLabels.IsValue = true;
serie3.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = true;
serie3.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle;
serie3.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.Light_yellow;
//Positioning the chart in the worksheet
chart.TopRow = 8;
chart.LeftColumn = 1;
chart.BottomRow = 23;
chart.RightColumn = 8;
//Saving the workbook
Stream stream = File.Create("Output.xlsx");
workbook.SaveAs(stream);
}
}
}
}
VB.NET
Imports Syncfusion.XlsIO
Imports System.Reflection
Imports System.IO
Namespace ChartSample
Class Program
Public Shared Sub Main(ByVal args As String())
Using excelEngine As ExcelEngine = New ExcelEngine()
Dim application As IApplication = excelEngine.Excel
application.DefaultVersion = ExcelVersion.Excel2016
'Open existing workbook with data entered
Dim assembly As Assembly = GetType(Program).GetTypeInfo().Assembly
Dim fileStream As Stream = assembly.GetManifestResourceStream("ChartSample.InputTemplate.xlsx")
Dim workbook As IWorkbook = application.Workbooks.Open(fileStream)
Dim worksheet As IWorksheet = workbook.Worksheets(0)
'Initialize chart and assign data
Dim chart As IChartShape = worksheet.Charts.Add
chart.DataRange = worksheet("A1:F4")
chart.ChartType = ExcelChartType.Stock_HighLowClose
'Apply chart elements
'Set Chart Title
chart.ChartTitle = "High-Low-Close Chart"
'Set Legend
chart.HasLegend = True
chart.Legend.Position = ExcelLegendPosition.Bottom
'Set data labels
Dim serie1 As IChartSerie = chart.Series(0)
Dim serie2 As IChartSerie = chart.Series(1)
Dim serie3 As IChartSerie = chart.Series(2)
serie1.DataPoints.DefaultDataPoint.DataLabels.IsValue = True
serie1.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = True
serie1.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle
serie1.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.LightGreen
serie2.DataPoints.DefaultDataPoint.DataLabels.IsValue = True
serie2.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = True
serie2.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle
serie2.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.Red
serie3.DataPoints.DefaultDataPoint.DataLabels.IsValue = True
serie3.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = True
serie3.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle
serie3.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.Light_yellow
'Positioning chart in the worksheet
chart.TopRow = 8
chart.LeftColumn = 1
chart.BottomRow = 23
chart.RightColumn = 8
'Saving the workbook
Dim stream As Stream = File.Create("Output.xlsx")
workbook.SaveAs(stream)
End Using
End Sub
End Class
End Namespace