| xlsgen > overview > Vector shapes |

Vector shapes can be added freely anywhere in a worksheet or associated to a chart (moves with the chart). Vector shapes are rendered by xlsgen during print/preview/PDF/...
Vector shapes are resizable graphics with border and area formatting properties. They can also be rotated or flipped around. Vector shapes are either stuck to the cells grid, or inside a chart (then moving when the chart moves).
xlsgen exposes around 200 basic shapes, such as rectangles, arrows, callouts, in order to make it easy to add vector shapes to a spreadsheet.
The location of a vector shape includes :
This is pictured like this :

In addition to this, vector shapes have a number of features exposed in the IXlsVectorShape interface :
The following source code shows how to add the vector shapes picture above :
| Java code |
XlsWorksheet wksht = wbk.AddWorksheet( "Sheet1" );
XlsVectorShape sp = wksht.NewVectorShape(xlsgen.vectorshapetypeArrow,
4, //row1
2, //col1
8, //row2
4, //col2
0, 0, 0, 0);
sp.putRotation(10);
XlsVectorShape sp2 = wksht.NewVectorShape(xlsgen.vectorshapetypeIrregularSeal1,
4, //row1
6, //col1
11, //row2
8, //col2
100, 100, 0, 0);
sp2.putLabel("Splash!");
sp2.getPatterns().getArea().getGradient().getSingleColor().putGradientStyle(xlsgen.gradientstyle_verticall0);
sp2.getPatterns().getArea().getGradient().getSingleColor().putColor(0xDD8800);
sp2.getPatterns().getArea().getGradient().getSingleColor().putLightThreshold(100);
sp2.getPatterns().getBorders().putType(xlsgen.chartbordertype_none);
XlsStyle styleAlign = wksht.NewStyle();
styleAlign.getAlignment().putHorizontal(xlsgen.halign_center);
styleAlign.getFont().putColor(0xFF0000);
sp2.putStyle(styleAlign);
XlsVectorShape spArrow = wksht.NewVectorShape(xlsgen.vectorshapetypeLine,
12, //row1
2, //col1
16, //row2
4, //col2
0, 0, 0, 0);
XlsVectorShapeArrow a = spArrow.getArrowStyleEndCap();
a.putStyle(xlsgen.vectorshapearrowstyle_open);
a.putWidth(xlsgen.vectorshapearrowwidth_wide);
a.putLength(xlsgen.vectorshapearrowlength_long);
XlsVectorShape spArrow2 = wksht.NewVectorShape(xlsgen.vectorshapetypeLine,
12, //row1
6, //col1
18, //row2
8, //col2
100, 100, 0, 0);
XlsVectorShapeArrow b1 = spArrow2.getArrowStyleBeginCap();
b1.putStyle(xlsgen.vectorshapearrowstyle_triangle);
b1.putWidth(xlsgen.vectorshapearrowwidth_narrow);
b1.putLength(xlsgen.vectorshapearrowlength_long);
XlsVectorShapeArrow b2 = spArrow2.getArrowStyleEndCap();
b2.putStyle(xlsgen.vectorshapearrowstyle_triangle);
b2.putWidth(xlsgen.vectorshapearrowwidth_narrow);
b2.putLength(xlsgen.vectorshapearrowlength_long);
spArrow2.putFlipHorizontal(true);
|
| VB code |
Dim wksht As xlsgen.IXlsWorksheet
Set wksht = wbk.AddWorksheet("Sheet1")
Dim sp As xlsgen.IXlsVectorShape
Set sp = wksht.NewVectorShape(xlsgen.enumVectorShape.vectorshapetypeArrow, _
4, _
2, _
8, _
4, _
0, 0, 0, 0)
sp.Rotation = 10
Dim sp2 As xlsgen.IXlsVectorShape
Set sp2 = wksht.NewVectorShape(xlsgen.enumVectorShape.vectorshapetypeIrregularSeal1, _
4, _
6, _
11, _
8, _
100, 100, 0, 0)
sp2.Label = "Splash!"
sp2.Patterns.Area.Gradient.SingleColor.GradientStyle = xlsgen.enumChartGradientStyle.gradientstyle_verticall0
sp2.Patterns.Area.Gradient.SingleColor.Color = &HDD8800
sp2.Patterns.Area.Gradient.SingleColor.LightThreshold = 100
sp2.Patterns.Borders.Type = xlsgen.enumChartBorder.chartbordertype_none
Dim styleAlign As xlsgen.IXlsStyle
Set styleAlign = wksht.NewStyle
styleAlign.Alignment.Horizontal = xlsgen.enumHorizontalAlignment.halign_center
styleAlign.Font.Color = &HFF0000
sp2.Style = styleAlign
Dim spArrow As xlsgen.IXlsVectorShape
Set spArrow = wksht.NewVectorShape(xlsgen.enumVectorShape.vectorshapetypeLine, _
12, _
2, _
16, _
4, _
0, 0, 0, 0)
Dim a As xlsgen.IXlsVectorShapeArrow
Set a = spArrow.ArrowStyleEndCap
a.Style = xlsgen.enumVectorShapeArrowStyle.vectorshapearrowstyle_open
a.Width = xlsgen.enumVectorShapeArrowWidth.vectorshapearrowwidth_wide
a.Length = xlsgen.enumVectorShapeArrowLength.vectorshapearrowlength_long
Dim spArrow2 As xlsgen.IXlsVectorShape
Set spArrow2 = wksht.NewVectorShape(xlsgen.enumVectorShape.vectorshapetypeLine, _
12, _
6, _
18, _
8, _
100, 100, 0, 0)
Dim b1 As xlsgen.IXlsVectorShapeArrow
Set b1 = spArrow2.ArrowStyleBeginCap
b1.Style = xlsgen.enumVectorShapeArrowStyle.vectorshapearrowstyle_triangle
b1.Width = xlsgen.enumVectorShapeArrowWidth.vectorshapearrowwidth_narrow
b1.Length = xlsgen.enumVectorShapeArrowLength.vectorshapearrowlength_long
Dim b2 As xlsgen.IXlsVectorShapeArrow
Set b2 = spArrow2.ArrowStyleEndCap
b2.Style = xlsgen.enumVectorShapeArrowStyle.vectorshapearrowstyle_triangle
b2.Width = xlsgen.enumVectorShapeArrowWidth.vectorshapearrowwidth_narrow
b2.Length = xlsgen.enumVectorShapeArrowLength.vectorshapearrowlength_long
spArrow2.FlipHorizontal = True
|
| C# code |
IXlsWorksheet wksht = wbk.AddWorksheet( "Sheet1" );
IXlsVectorShape sp = wksht.NewVectorShape(enumVectorShape.vectorshapetypeArrow,
4, //row1
2, //col1
8, //row2
4, //col2
0, 0, 0, 0);
sp.Rotation = 10;
IXlsVectorShape sp2 = wksht.NewVectorShape(enumVectorShape.vectorshapetypeIrregularSeal1,
4, //row1
6, //col1
11, //row2
8, //col2
100, 100, 0, 0);
sp2.Label = "Splash!";
sp2.Patterns.Area.Gradient.SingleColor.GradientStyle = enumChartGradientStyle.gradientstyle_verticall0;
sp2.Patterns.Area.Gradient.SingleColor.Color = 0xDD8800;
sp2.Patterns.Area.Gradient.SingleColor.LightThreshold = 100;
sp2.Patterns.Borders.Type = enumChartBorder.chartbordertype_none;
IXlsStyle styleAlign = wksht.NewStyle();
styleAlign.Alignment.Horizontal = enumHorizontalAlignment.halign_center;
styleAlign.Font.Color = 0xFF0000;
sp2.Style = styleAlign;
IXlsVectorShape spArrow = wksht.NewVectorShape(enumVectorShape.vectorshapetypeLine,
12, //row1
2, //col1
16, //row2
4, //col2
0, 0, 0, 0);
IXlsVectorShapeArrow a = spArrow.ArrowStyleEndCap;
a.Style = enumVectorShapeArrowStyle.vectorshapearrowstyle_open;
a.Width = enumVectorShapeArrowWidth.vectorshapearrowwidth_wide;
a.Length = enumVectorShapeArrowLength.vectorshapearrowlength_long;
IXlsVectorShape spArrow2 = wksht.NewVectorShape(enumVectorShape.vectorshapetypeLine,
12, //row1
6, //col1
18, //row2
8, //col2
100, 100, 0, 0);
IXlsVectorShapeArrow b1 = spArrow2.ArrowStyleBeginCap;
b1.Style = enumVectorShapeArrowStyle.vectorshapearrowstyle_triangle;
b1.Width = enumVectorShapeArrowWidth.vectorshapearrowwidth_narrow;
b1.Length = enumVectorShapeArrowLength.vectorshapearrowlength_long;
IXlsVectorShapeArrow b2 = spArrow2.ArrowStyleEndCap;
b2.Style = enumVectorShapeArrowStyle.vectorshapearrowstyle_triangle;
b2.Width = enumVectorShapeArrowWidth.vectorshapearrowwidth_narrow;
b2.Length = enumVectorShapeArrowLength.vectorshapearrowlength_long;
spArrow2.FlipHorizontal = 1;
|
| C++ code |
xlsgen::IXlsWorksheetPtr wksht = wbk->AddWorksheet(L"Sheet1");
xlsgen::IXlsVectorShapePtr sp = wksht->NewVectorShape(xlsgen::vectorshapetypeArrow,
4, //row1
2, //col1
8, //row2
4, //col2
0, 0, 0, 0);
sp->Rotation = 10;
xlsgen::IXlsVectorShapePtr sp2 = wksht->NewVectorShape(xlsgen::vectorshapetypeIrregularSeal1,
4, //row1
6, //col1
11, //row2
8, //col2
100, 100, 0, 0);
sp2->Label = L"Splash!";
sp2->Patterns->Area->Gradient->SingleColor->GradientStyle = xlsgen::gradientstyle_verticall0;
sp2->Patterns->Area->Gradient->SingleColor->Color = 0xDD8800;
sp2->Patterns->Area->Gradient->SingleColor->LightThreshold = 100;
sp2->Patterns->Borders->Type = xlsgen::chartbordertype_none;
xlsgen::IXlsStylePtr styleAlign = wksht->NewStyle();
styleAlign->Alignment->Horizontal = xlsgen::halign_center;
styleAlign->Font->Color = 0xFF0000;
sp2->Style = styleAlign;
xlsgen::IXlsVectorShapePtr spArrow = wksht->NewVectorShape(xlsgen::vectorshapetypeLine,
12, //row1
2, //col1
16, //row2
4, //col2
0, 0, 0, 0);
xlsgen::IXlsVectorShapeArrowPtr a = spArrow->ArrowStyleEndCap;
a->Style = xlsgen::vectorshapearrowstyle_open;
a->Width = xlsgen::vectorshapearrowwidth_wide;
a->Length = xlsgen::vectorshapearrowlength_long;
xlsgen::IXlsVectorShapePtr spArrow2 = wksht->NewVectorShape(xlsgen::vectorshapetypeLine,
12, //row1
6, //col1
18, //row2
8, //col2
100, 100, 0, 0);
xlsgen::IXlsVectorShapeArrowPtr b1 = spArrow2->ArrowStyleBeginCap;
b1->Style = xlsgen::vectorshapearrowstyle_triangle;
b1->Width = xlsgen::vectorshapearrowwidth_narrow;
b1->Length = xlsgen::vectorshapearrowlength_long;
xlsgen::IXlsVectorShapeArrowPtr b2 = spArrow2->ArrowStyleEndCap;
b2->Style = xlsgen::vectorshapearrowstyle_triangle;
b2->Width = xlsgen::vectorshapearrowwidth_narrow;
b2->Length = xlsgen::vectorshapearrowlength_long;
spArrow2->FlipHorizontal = TRUE;
|
When a vector shape is added to a chart, the location setting differs in that the corners of the vector shape are not defined by cells, rather by a coordinate system within the chart, between 1 and 4000 on both directions. It works like this in practice :
| Java code |
XlsVectorShape spC = chart001s0.AddVectorShape(xlsgen.vectorshapetypeRightArrowCallout);
spC.putLabel("another label");
spC.putRotation(-20);
spC.getPatterns.getArea().putType(xlsgen.chartareatype_custom);
spC.getPatterns.getArea().getGradient().getDualColor().putGradientStyle(xlsgen.gradientstyle_horizontal0);
spC.getPatterns.getArea().getGradient().getDualColor().putFirstColor(0x00FF0000);
spC.getPatterns.getArea().getGradient().getDualColor().putSecondColor(0x000000FF);
spC.putLeftColumn(2000); // 1-4000
spC.putRightColumn(3000); // 1-4000
spC.putTopCell(2500); // 1-4000
spC.putBottomCell(3200); // 1-4000
|
| VB code |
IXlsVectorShape spC = chart001s0.AddVectorShape(enumVectorShape.vectorshapetypeRightArrowCallout) spC.Label = "another label" spC.Rotation = -20 spC.Patterns.Area.Type = enumChartArea.chartareatype_custom spC.Patterns.Area.Gradient.DualColor.GradientStyle = enumChartGradientStyle.gradientstyle_horizontal0 spC.Patterns.Area.Gradient.DualColor.FirstColor = &H00FF0000 spC.Patterns.Area.Gradient.DualColor.SecondColor = &H000000FF spC.LeftColumn = 2000 ' 1-4000 spC.RightColumn = 3000 ' 1-4000 spC.TopCell = 2500 ' 1-4000 spC.BottomCell = 3200 ' 1-4000 |
| C# code |
IXlsVectorShape spC = chart001s0.AddVectorShape(enumVectorShape.vectorshapetypeRightArrowCallout); spC.Label = "another label"; spC.Rotation = -20; spC.Patterns.Area.Type = enumChartArea.chartareatype_custom; spC.Patterns.Area.Gradient.DualColor.GradientStyle = enumChartGradientStyle.gradientstyle_horizontal0; spC.Patterns.Area.Gradient.DualColor.FirstColor = 0x00FF0000; spC.Patterns.Area.Gradient.DualColor.SecondColor = 0x000000FF; spC.LeftColumn = 2000; // 1-4000 spC.RightColumn = 3000; // 1-4000 spC.TopCell = 2500; // 1-4000 spC.BottomCell = 3200; // 1-4000 |
| C++ code |
xlsgen::IXlsVectorShapePtr spC = chart001s0->AddVectorShape(xlsgen::vectorshapetypeRightArrowCallout); spC->Label = L"another label"; spC->Rotation = -20; spC->Patterns->Area->Type = xlsgen::chartareatype_custom; spC->Patterns->Area->Gradient->DualColor->GradientStyle = xlsgen::gradientstyle_horizontal0; spC->Patterns->Area->Gradient->DualColor->FirstColor = 0x00FF0000; spC->Patterns->Area->Gradient->DualColor->SecondColor = 0x000000FF; spC->LeftColumn = 2000; // 1-4000 spC->RightColumn = 3000; // 1-4000 spC->TopCell = 2500; // 1-4000 spC->BottomCell = 3200; // 1-4000 |
xlsgen renders (print/preview/PDF/...) the following basic shape types :
xlsgen renders both floating vector shapes and chart vector shapes.
xlsgen documentation. © ARsT Design all rights reserved.