What's New in Spread.NET v17
Spread.NET v17.2 - September 18, 2024
We are happy to announce the release of Spread.NET V17 Service Pack 2 (17.2)! This release is mainly focused on bug fixes, with two enhancements made to Spread.
Picture Sizing Mode
The InsertPictureInCell method has been enhanced to return a CellImage, which can be customized in terms of sizing. The new SizingMode enumeration includes:
- Fit - Fits the image in a cell, maintaining the original aspect ratio
- Fill - Fills an entire cell with the image, ignoring the aspect ratio
- Original - Maintains the original image size, which may exceed the bounds of the cell
- Custom - Displays the image according to a custom height and width
Check out the Adding Image in a Cell documentation.
Text Rendering Enhancement
The Text Renderer in Spread.NET has been enhanced to enable the user to turn GDI Text Rendering on and off. This is done using the TextHelper.UseGDITextRendering property. Graphics Device Interface (GDI) rendering is a legacy rendering component for Microsoft Windows, and in some cases can render text incorrectly:
By setting it to false, we can fix some of the text rendering:
Check out the Text Rendering with GDI documentation.
Spread.NET v17.1 - April 25, 2024
Spread.NET v17.1 is here and includes many new exciting features and enhancements that primarily focus on the Spread WinForms control.
Error Bar Support in Charts
Spread charts now support error bars for the following series types:
- Bar
- Line
- Area
- XYLine
- XYPoint
- ClusteredBar
- HighLowClose
- Candlestick
Various APIs have been added to support these:
fpSpread1.ActiveSheet.AddChart(new CellRange(0, 0, 3, 6), typeof(FarPoint.Win.Chart.ClusteredBarSeries), 600, 300, 50, 50);
fpSpread1.ActiveSheet.SetClip(0, 1, 1, 5, "1.2\t0\t-12.5\t-5\t15");
fpSpread1.ActiveSheet.SetClip(1, 0, 1, 6, "1\t-15.43\t-11\t16\t0\t17.5");
fpSpread1.ActiveSheet.SetClip(2, 0, 1, 6, "2\t7\t12\0\t-10\t10\t0");
if (fpSpread1.ActiveSheet.Charts[0].Model.PlotAreas[0].Series[0] is ClusteredBarSeries cluster)
{
foreach (BarSeries series in cluster.Series)
{
ErrorBars errorBar = series.SetErrorBarsVisible(true);
errorBar.ValueType = ErrorBarValueType.StandardError;
errorBar.Type = FarPoint.Win.Chart.ErrorBarType.Both;
}
}
Error bars are supported for import and export to XML and XLSX files and are also supported in the Spread Chart Designer:
For more information, see our Spread WinForms Error Bars documentation.
Column Style for Group Footers
In this new release, Column Styles can now be set on group footers. These can be set with the new IGroupFooterStyleSupport interface:
SheetView STestActiveSheet = fpSpread1.ActiveSheet;
STestActiveSheet.RowCount = 6;
STestActiveSheet.ColumnCount = 4;
STestActiveSheet.Cells[0, 0, 3, 0].Value = 1;
STestActiveSheet.Cells[4, 0, 5, 0].Value = 2;
STestActiveSheet.Cells[0, 2, 3, 2].Value = DateTime.Today;
DefaultGroupFooterCollection defaultGroupFooterCol = new DefaultGroupFooterCollection(6, 4);
DefaultGroupFooter defaultGroupFooter = defaultGroupFooterCol[0];
ISheetDataModel model = defaultGroupFooter.DataModel as ISheetDataModel;
(model as IAggregationSupport).SetCellAggregationType(0, 2, AggregationType.Avg);
TestFpSpread.ActiveSheet.DefaultGroupFooter = defaultGroupFooterCol;
GroupDataModel gdm = new GroupDataModel(STestActiveSheet.Models.Data);
STestActiveSheet.Models.Data = gdm;
gdm.Group(new SortInfo[] { new SortInfo(0, true) }, null);
TestFpSpread.ActiveSheet.GroupFooterVisible = true;
var style = new StyleInfo();
style.BackColor = System.Drawing.Color.LightBlue;
DateTimeCellType dt = new DateTimeCellType();
dt.DateTimeFormat = DateTimeFormat.UserDefined;
dt.UserDefinedFormat = "dd.MM.yyyy HH:mm:ss";
style.CellType = dt;
style.HorizontalAlignment = CellHorizontalAlignment.Left;
for (int i = 0; i < gdm.Groups.Count; i++)
{
var group = (Group)gdm.Groups[i];
group.GroupFooter.StyleManager.SetColumnStyle(2, style);
}
Check out the Spread WinForms Set Column Style in Group Footer documentation to learn more.
MultiOption CellType Compact Mode
The MultiOption CellType in Spread WinForms now supports a compact mode, which changes how a MultiOption CellType displays. This can be set with the new Compact property:
fpSpread1.ActiveSheet.Columns[0].Width = 200;
MultiOptionCellType cellType = new MultiOptionCellType();
cellType.Items = new string[] { "Diffuse", "A", "B" };
cellType.Compact = true;
cellType.Orientation = RadioOrientation.Horizontal;
fpSpread1.ActiveSheet.Cells[0, 0].CellType = cellType;
See the Setting a Multiple Option Cell documentation for more details.
CellType Dialogs
The CellType Dialog has been updated internally to now use the built-in dialogue similar to the dialogs introduced in v17:
public static Form CellTypes(FpSpread spread, CellType.ICellType cellType);
TabStrip Button Customization
The behavior of TabStrip buttons can now be customized via the TabStrip.ButtonClick event. In the following example, the code changes the default functionality of the previous and next TabStrip buttons. Instead of horizontally scrolling through the Sheet tabs, it will now also set the next or previous sheet as Active:
fpSpread1.Sheets.Count = 8;
fpSpread1.TabStrip.ButtonClick += TabStrip_ButtonClick;
private void TabStrip_ButtonClick(object sender, TabStripButtonClickEventArgs e)
{
Debug.WriteLine($"TabStrip_ButtonClick. {sender}. {e.Button}");
if (e.Button == TabStripButton.Next)
{
fpSpread1.ActiveSheetIndex += 1;
}
else if (e.Button == TabStripButton.Previous)
{
fpSpread1.ActiveSheetIndex -= 1;
}
}
Read the Customize Tab Strip Behavior documentation for more detail.
Double Click Fill Down
Formulas in Spread .NET can now be filled down by double-clicking on the fill handle at the bottom right corner of a selected cell. Doing so will automatically copy the formula down to the end of your data, matching the rows in adjacent columns.
fpSpread1.ActiveSheet.Cells[0, 0].Value = 1;
fpSpread1.ActiveSheet.Cells[1, 0].Value = 2;
fpSpread1.ActiveSheet.Cells[2, 0].Value = 3;
fpSpread1.ActiveSheet.Cells[3, 0].Value = 4;
fpSpread1.ActiveSheet.Cells[4, 0].Value = 5;
fpSpread1.ActiveSheet.Cells[0, 1].Formula = "PRODUCT(A1,5)";
To learn more, see our Using Double Click to Fill Cells documentation.
Number Format for Status Bar
Numbers that appear in the Status Bar at the bottom of the Spread instance can now be formatted based on the same format as the active cell.
Spread.NET v17 - December 26, 2023
Spread.NET v17 is here and includes many new exciting features and enhancements.
Spread Ribbon Control
The Spread Ribbon Control is a new addition to Spread.NET, allowing you to insert the Designer ribbon into your application for use with Spread.NET. This includes contextual ribbon tabs, buttons, menus, and Error Handling. You simply create the ribbon bar instance and attach it to an FpSpread instance:
ribbonBar1.Attach(fpSpread1);
You can also override built-in commands using the CommandExecuting and CommandExecuted events and manually execute commands using the ExecuteCommand function.
Workbook Enhancements
Header and Footer Wrap Text
With this release, Spread .NET provides the ability to wrap text for Column headers and footers with the WrapText2 function.
Help - Column Header | Help - Column Footer
Printing Enhancements
Printing has been updated in Spread.NET to include even more features. These are:
- Different Header/Footer Printing – Choose how to print headers and footers, like just the first page or odd and even pages.
- Exporting Print Header/Footer Images – Headers and Footers that have images in them can be exported. If there are multiple images, only the first image will be exported.
- Collated/Uncollated Option – This new option lets the user choose whether to print pages as a complete set or multiple copies of each page.
- Excel-Compatible Printing – Printing behavior can now be changed like Excel, so if it is set to true the printing result will be similar to Excel but not old versions of Spread.NET. While all behavior will not be exactly the same as Excel, we are continuing to change and add behavior to make it more like Excel. This also does not support printing to PDF if this option is true.
Saving to HTML
Since .NET and .NET Core were updated, data could not be saved to HTML using the SheetView.SaveHtml function anymore. As a replacement, this is now supported via the IWorksheet.SaveAs and IWorkbook.SaveAs functions. These functions let you save the workbook or worksheet to an HTML format. This is limited to the cell data only.
Built-In Themes
Spread .NET now supports built-in themes similar to Excel. These can be used to change the appearance of a worksheet, including color and font. You can customize themes as well, in addition to saving, editing and deleting custom colors and fonts for the themes.
Office 365 Default Theme 2023
The new default theme for Office 365 has been added to Spread .NET to keep the same look across your applications.
Custom Document Properties
Spread .NET now supports setting custom document properties, including setting properties with a Name, Type, and Value.
Get Last Row/Column of Cell Range
The new IRange.End function allows you to get an IRange object that represents the cell at the end of a region of cells that contain the source range. This is useful for determining the last row or column in which data is set.
ColumnDragMoveCompleting / RowDragMoveCompleting Events
The new ColumnDragMoveCompleting and RowDragMoveCompleting events fire when a user finishes moving a row or column via dragging.
Hide Borders of Spilled Dynamic Array
When using dynamic arrays, an indicator will show where it will spill. With the DynamicArrayRenderer property, you can choose to hide this indicator.
Paste Options for Rich Clipboard
When the RichClipboard option is set to True, a user can select various pasting types including:
- Paste
- Formulas
- Formulas & Number Formatting
- Keep Source Formatting
- No Borders
- Keep Source Column Widths
- Transpose
- Paste Values
- Values & Number Formatting
- Values & Source Formatting
- Formatting
- Paste Link
- Paste as Picture
- Linked Picture
- Column Widths
- Merge Conditional Formatting
GoTo First/Last Sheet
Ctrl clicking on the next and previous button of the tab strip will now navigate to the last or first sheet, respectively.
Copy Method of IWorksheets
The IWorksheets interface now has a Copy method that is used for both for copying a cell’s destination/reference sheet and creating a reference state within the copied sheets.
Scrolling Left and Right with Mouse Wheel
Spread .NET now supports scrolling horizontally in a worksheet using Shift+Ctrl+Mouse Wheel.
Calculation Enhancements
EVALUATE Function
The EVALUATE function has been added to Spread .NET. This function allows you to evaluate a text equation as an algebraic equation. This function can only be used within the confines of a Named Range.
IRange.HasSpill API
Spread .NET now includes the IRange.HasSpill API, similar to Excel. This API helps determine whether a cell range includes spilled values or not.
Chart Enhancements
Multi-Level Category Labels
Chart labels now support multiple rows or columns, which can help with chart organization and readability.
Chart Sheet
Chart sheets are a new type of sheet in Spread .NET, which only contains a chart and nothing else. This is only available if the EnhancedShapeEngine property is set to true. This is available through API and also right-clicking on a sheet tab.
Embedded Shapes with Charts
Charts now support embedding shapes within them. You can insert a shape in a chart, and it can be interacted with as normal but is limited by the chart’s boundaries.
Shape Enhancements
Shape with Curve Annotation
Shapes can now be drawn with curved segments. These can done either via code or the ribbon bar. When drawing them manually, they are added when moving and clicking with the mouse and then double-clicking, pressing Enter/Esc, or single-clicking the starting point to finish the shape.
Insert Pictures in Cells
Pictures in Spread .NET can now be inserted inside of cells. This is supported via “Paste Picture in Cell” in the Paste Options context menu (when RichClipboard is set to true) and “Insert Picutres in Cells” in the Ribbon Bar. User also can add it via code using IRange.InsertPictureInCell.
Vertical Text in Shapes
Shapes now support setting vertical text correctly as long as the EnhancedShapeEngine property is set to true. This is done via the TextOrientation.HorizontalRotatedFarEast setting.
.NET 8 Support
Spread .NET now supports .NET 8 with the V17 release.
Shortcut Keys
Spread .NET has supported Excel-compatible shortcut keys, and with the V17 release we have added support for even more shortcut keys, including:
- Ctrl + - : Delete Cells
- Ctrl + F3 : Show Name Manage Dialog
- Shift + F9 : Calculate the active sheet
- F9 : Calculate the entire workbook
- Ctrl + Shift + T : Show/hide total row of a table
- Ctrl + T : Create table
- Ctrl + U : Formats text as underline
- Ctrl + I : Formats text as italic
- Ctrl + B : Formats text as bold
- Ctrl + Shift + % : Format text as a percentage
- Ctrl + Shift + V : Paste plain text or paste values
- Alt + Shift + Right Arrow : Create an outline group
- Alt + Shift + Left Arrow : Ungroup
Performance Improvements
The V17 release of Spread .NET has also addressed a few performance issues, including:
- Lagging when moving focus with an arrow key
- Calculating cells after set formula/value
- Recalculation after spilling 500 rows in 400 columns
- Issues upgrading from older versions
- INDEX formula references
- Dynamic array optimization
Updates for Spread.NET v17
Related Links