How to create Excel volume high low close chart in C#, VB.NET?
This article explains how to create a volume-high-low-close chart in Excel using Syncfusion Excel (XlsIO) library.
What is a volume-high-low-close chart?
A volume-high-low-close stock market chart is a type of bar chart or graph used primarily to show changes in the value of tradable assets such as stocks over a given period of time.
Volume-High-Low-Close Chart
To create a volume-high-low-close chart in Excel using XlsIO, you need to do the following steps.
Steps to create volume-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_VolumeHighLowClose enum value.
C#
//Set region of Chart data
chart.DataRange = worksheet["A1:F5"];
//Set chart type to Stock_VolumeHighLowClose
chart.ChartType = ExcelChartType.Stock_VolumeHighLowClose;
For creating a stock volume-high-low-close chart, the series count must be 4. 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 = "Volume-High-Low-Close Chart";
//Set Legend
chart.HasLegend = true;
chart.Legend.Position = ExcelLegendPosition.Bottom;
//Set Datalabels
IChartSerie serie1 = chart.Series[1];
serie1.DataPoints.DefaultDataPoint.DataLabels.IsValue = true;
serie1.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = true;
serie1.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle;
serie1.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.LightGreen;
Applicable properties to modify volume series in volume-high-low-close chart
Below is the list of other common properties applicable to modify volume series (chart.Series[0]) in volume-high-low-close-chart.
- GapWidth (value should be between 0 and 500)
- Overlap (value should be between -100 and 100)
Properties used to modify the markers in the volume-high-low-close chart
Below is the list of properties that are used to change the markers in volume-high-low-close chart.
- MarkerBackgroundColor (or) MarkerBackgroundColorIndex
- MarkerForegroundColor (or) MarkerForegroungColorIndex
- MarkerSize
- MarkerStyle
- IsAutoMarkerNote:
Marker properties are applicable only for high (chart.Series[1]), low (chart.Series[2]) and close (chart.Series[3]) 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 volume-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:F5"];
chart.ChartType = ExcelChartType.Stock_VolumeHighLowClose;
//Apply chart elements
//Set Chart Title
chart.ChartTitle = "Volume-High-Low-Close Chart";
//Set Legend
chart.HasLegend = true;
chart.Legend.Position = ExcelLegendPosition.Bottom;
//Set Datalabels
IChartSerie serie1 = chart.Series[1];
IChartSerie serie2 = chart.Series[2];
IChartSerie serie3 = chart.Series[3];
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:F5")
chart.ChartType = ExcelChartType.Stock_VolumeHighLowClose
'Apply chart elements
'Set Chart Title
chart.ChartTitle = "Volume-High-Low-Close Chart"
'Set Legend
chart.HasLegend = True
chart.Legend.Position = ExcelLegendPosition.Bottom
'Set data labels
Dim serie1 As IChartSerie = chart.Series(1)
Dim serie2 As IChartSerie = chart.Series(2)
Dim serie3 As IChartSerie = chart.Series(3)
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