The named ranges are not updated after rows or columns are inserted.
When the column width is not an integer number, but a decimal fraction one, the width which is exported is not calculated correctly. For example, if there is a cell with some text and its column's width is autofit, it's exported with different actual width. In addition, if the exported xlsx file is imported back in the Spreadsheet, the column width is a bit different from the one which was exported (only for the first export-import roundtrip).
When there are split panes in a workbook, the topLeftCell property can be omitted. In this case, the format provider throws NullReferenceException.
When a worksheet has name that has spaces and a hyperlink to this worksheet is being inserted in Excel, quotes are used to surround the name (ex: 'Sheet 12'!A1) for a valid hyperlink. If quotes are not added, the hyperlink is invalid. In RadSpreadsheet, it is the opposite: (Sheet 12!A1 is correct, while 'Sheet 12'!A1 is incorrect). Thus, opening such an exported document from RadSpreadsheet in Excel loads it with incorrect hyperlinks; and importing such an Excel document in RadSpreadsheet loads it with incorrect hyperlinks. A way to workaround this issue is to modify the hyperlinks on import/export from/to RadSpreadsheet. You can find attached a project demonstrating this approach.
Workbook wb = new Workbook();
Worksheet worksheet = wb.Worksheets.Add();
PatternFill fill = new PatternFill(PatternType.DiagonalStripe, Colors.Red, Colors.Transparent);
worksheet.Cells[0, 0].SetFill(fill);
string outputFilePath = "Sample.pdf";
File.Delete(outputFilePath);
Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf.PdfFormatProvider pdfFormatProvider =
new Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf.PdfFormatProvider();
//export to file
using (Stream output = File.OpenWrite(outputFilePath))
{
pdfFormatProvider.Export(wb, output, TimeSpan.FromSeconds(10));
}
Process.Start(new ProcessStartInfo() { FileName = outputFilePath, UseShellExecute = true });Add support for array formulas (CellFormulaType "array"). These formulas can accept as parameters and return results containing whole arrays (one- or two- dimensional) of data. In MS Excel, such formulas are inserted with CTRL + SHIFT + Enter, and visualized enclosed with curly brackets ('{' and '}').
Importing an XLSX workbook can crash with System.ArgumentNullException: Value cannot be null. Parameter name: key during Workbook.ResumeCalculationMapRegistration().
Root cause:CellSelection.SetValue method causes memory leak of CellReferenceRangeExpression objects in some cases when cell value is referenced by formulas. The memory leak is small, but the remaining CellReferenceRangeExpression continue to listen to some events, causing performance issues when their number become large - the time to set the value increases with each set.
When opening an Xlsx file with conditional formatting I get an Exception:
"System.ArgumentNullException: 'Value cannot be null. (Parameter 'formatting')'
at Telerik.Windows.Documents.Spreadsheet.Model.ConditionalFormattings.ConditionalFormattingDxfRule..ctor(DifferentialFormatting formatting)
at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.Model.Elements.Worksheets.ConditionalFormattingRuleElement.GetRule(DifferentialFormatting formatting)
at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.Model.Elements.Worksheets.ConditionalFormattingRuleElement.OnAfterRead(IXlsxWorksheetImportContext context)
at Telerik.Windows.Documents.FormatProviders.OpenXml.Model.Elements.OpenXmlElementBase.ReadChildElements(IOpenXmlReader reader, IOpenXmlImportContext context)
at Telerik.Windows.Documents.FormatProviders.OpenXml.Model.Elements.OpenXmlElementBase.Read(IOpenXmlReader reader, IOpenXmlImportContext context)
at Telerik.Windows.Documents.FormatProviders.OpenXml.Model.Elements.OpenXmlElementBase.ReadChildElements(IOpenXmlReader reader, IOpenXmlImportContext context)
at Telerik.Windows.Documents.FormatProviders.OpenXml.Model.Elements.OpenXmlElementBase.Read(IOpenXmlReader reader, IOpenXmlImportContext context)
at Telerik.Windows.Documents.FormatProviders.OpenXml.OpenXmlImporter`1.ImportPartFromArchive(ZipArchiveEntry zipEntry, PartBase part, IOpenXmlImportContext context)
at Telerik.Windows.Documents.FormatProviders.OpenXml.OpenXmlImporter`1.Import(Stream input, IOpenXmlImportContext context)
at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.XlsxFormatProvider.ImportOverride(Stream input)
at WpfApp1.MainWindow.StartExcel() in C:\Users\larse\source\repos\WpfApp1\MainWindow.xaml.cs:line 49"
To quote my colleage: "After dissecting the Excel template file, I have isolated what is causing the issue. If conditional formatting is used to disable cell boarders it results in the error, if the conditional formatting is updated to turn the necessary borders white, instead of disabling the report exports correctly, the following screenshot also explains."
Add support for creating Tables and applying tables styles (predefined ones or custom).
An error occurs while importing an XLSX document with charts. Here is the stack trace:
at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.Contexts.XlsxWorkbookImportContext.PairSeriesGroupsWithAxes() at Telerik.Windows.Documents.FormatProviders.OpenXml.Model.Elements.Chart.PlotAreaElement.CopyPropertiesTo(IOpenXmlImportContext context, DocumentChart chart) at Telerik.Windows.Documents.FormatProviders.OpenXml.Model.Elements.Chart.ChartElement.CopyPropertiesTo(IOpenXmlImportContext context, DocumentChart chart) at Telerik.Windows.Documents.FormatProviders.OpenXml.Model.Elements.Chart.ChartSpaceElement.OnAfterRead(IOpenXmlImportContext context) at Telerik.Windows.Documents.FormatProviders.OpenXml.Model.Elements.OpenXmlElementBase.Read(IOpenXmlReader reader, IOpenXmlImportContext context) at Telerik.Windows.Documents.FormatProviders.OpenXml.Model.Parts.ChartPart.Import(IOpenXmlReader reader, IOpenXmlImportContext context) at Telerik.Windows.Documents.FormatProviders.OpenXml.Model.Parts.OpenXmlPartBase.Import(Stream stream, IOpenXmlImportContext context) at Telerik.Windows.Documents.FormatProviders.OpenXml.OpenXmlImporter`1.ImportPartFromArchive(ZipArchiveEntry zipEntry, PartBase part, IOpenXmlImportContext context) at Telerik.Windows.Documents.FormatProviders.OpenXml.OpenXmlImporter`1.Import(Stream input, IOpenXmlImportContext context) at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.XlsxFormatProvider.ImportOverride(Stream input, CancellationToken cancellationToken) at Telerik.Windows.Documents.Spreadsheet.FormatProviders.WorkbookFormatProviderBase.Import(Stream input, Nullable`1 timeout)
at Telerik.Windows.Documents.Spreadsheet.Utilities.SpreadsheetHelper.UpdateFloatingImageSize(FloatingShapeBase shape) at Telerik.Windows.Documents.Spreadsheet.Utilities.SpreadsheetHelper.CalculateRotatableShapeBoundingRect(Point position, FloatingTransformableShape shape) at Telerik.Windows.Documents.Spreadsheet.Layout.RadWorksheetLayout.CalculateShapeBoundingRect(FloatingShapeBase shape) at Telerik.Windows.Documents.Spreadsheet.Layout.RadWorksheetLayout.UpdateShapesSizeAndPosition() at Telerik.Windows.Documents.Spreadsheet.Layout.RadWorksheetLayout.Measure(CancellationToken cancellationToken) at Telerik.Windows.Documents.Spreadsheet.Layout.RadWorksheetLayout.Measure(CellIndex frozenCellIndex, CancellationToken cancellationToken) at Telerik.Windows.Documents.Spreadsheet.Model.Workbook.UpdateWorksheetLayout(RadWorksheetLayout worksheetLayout, Worksheet worksheet, Boolean isForPrinting, CancellationToken cancellationToken) at Telerik.Windows.Documents.Spreadsheet.Model.Workbook.GetWorksheetLayout(Worksheet worksheet, Boolean isForPrinting, CancellationToken cancellationToken) at Telerik.Windows.Documents.Spreadsheet.Model.Workbook.GetWorksheetLayout(Worksheet worksheet, Boolean isForPrinting) at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.Contexts.XlsxWorksheetImportContext.ImportShapesSizes() at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.Contexts.XlsxWorksheetImportContext.EndImport(XlsxWorkbookImportContext workbookContext) at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.Contexts.XlsxWorkbookImportContext.EndImport() at Telerik.Windows.Documents.FormatProviders.OpenXml.OpenXmlImporter`1.Import(Stream input, IOpenXmlImportContext context) at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.XlsxFormatProvider.ImportOverride(Stream input, CancellationToken cancellationToken) at Telerik.Windows.Documents.Spreadsheet.FormatProviders.WorkbookFormatProviderBase.Import(Stream input, Nullable`1 timeout)
For example:
Renaming a sheet named "Sheet1" to "Sheet 1", should update formulas references to it to 'Sheet 1!' (notice single quotes), which it does not. The formula =SUM(Sheet1!A2:C2) changes to the invalid expression =SUM(Sheet 1!A2:C2). This breaks formulas referencing that sheet.
Workaround:
Iterate all cells with formulas in the workbook and add single quotes to the beginning and end of sheet name reference. The attached project changes the name of Sheet1 and then fixes all formula references to it by enclosing its name in single quotes.