Skip to main content Skip to footer

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

InsertPictureInCell method to return a cell image in a .NET Spreadsheet Component

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:

Text Rendering Enhancement in .NET C# Spreadsheet

By setting it to false, we can fix some of the text rendering:

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:

Error Bar Support in Charts using .NET Spreadsheet WinForms Component

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);
}

 Column Style for Group Footers in .NET Spreadsheet Component

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;
MultiOption CellType Compact Mode in C# Spreadsheets
Compact: False
MultiOption CellType Compact Mode in C# Spreadsheets
Compact: True

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;
  }
}            

Default Tab Strip Functionality - C# Spreadsheet
Default TabStrip Functionality

.NET Spreadsheet Component TabStrip Button Customization
Customized TabStrip Functionality

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)";

Double Click Fill Down in .NET Spreadsheets

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.

New .NET Spreadsheet Ribbon Control

Help

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.

Wrap header text of .NET spreadsheet UI component

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.

Help

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.

Built-in Spreadsheet themes support for .NET applications

Help

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.

Custom Document Properties

Help

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.

Help

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.

Help

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

Help

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.

GoTo First/Last Sheet in a .NET Spreadsheet UI Component

Help

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.

Help

Scrolling Left and Right with Mouse Wheel

Spread .NET now supports scrolling horizontally in a worksheet using Shift+Ctrl+Mouse Wheel.

Help

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.

Help

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.

Help

Chart Enhancements

Multi-Level Category Labels

Chart labels now support multiple rows or columns, which can help with chart organization and readability.

Help

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.

New Chart Sheet in .NET Spreadsheet Component

Help

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.

Help

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.

GIF illustrates how to add a shape with curve annotation using Spread.NET's RibbonBar

Help

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.

Support for adding pictures in .NET Spreadsheet cell

Help

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.

Help

.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