Having cell with custom format string set to "MMM" does not apply correctly. Instead of showing the date in the defined format (for instance "Aug"), what actually is displayed is "MMM".
Provide the customers with the ability to export workbooks to HTML files.
When the automatic scaling options FitToColumns and FitToRows are used, the vertical and horizontal breaks, respectively, should be ignored. Workaround: Remove the page breaks if the worksheet uses automatic scaling and restore them if necessary: public void ExcelToPdf(string path) { var provider = new XlsxFormatProvider(); using (Stream input = File.OpenRead(path)) { var workbook = provider.Import(input); this.CachePageBreaks(workbook); var pdfProvider = new PdfFormatProvider(); pdfProvider.ExportSettings = new PdfExportSettings(ExportWhat.EntireWorkbook, false); using (Stream output = File.Open(@"C:\Users\velcheva\Desktop\26293903-c650-4d28-adee-58a542651f72_exceltopdf\exported.pdf", FileMode.Create)) { pdfProvider.Export(workbook, output); } this.RestorePageBreaks(workbook); } } private Dictionary<Worksheet,List<PageBreak>> verticalPageBreaksCache; private void CachePageBreaks(Workbook workbook) { this.verticalPageBreaksCache = new Dictionary<Worksheet, List<PageBreak>>(); foreach (Worksheet worksheet in workbook.Worksheets) { WorksheetPageSetup pageSetup = worksheet.WorksheetPageSetup; if (pageSetup.FitToPages) { this.verticalPageBreaksCache[worksheet] = new List<PageBreak>(pageSetup.PageBreaks.VerticalPageBreaks); if(pageSetup.FitToPagesWide != 0) { List<PageBreak> breaksToRemove = new List<PageBreak>(); breaksToRemove.AddRange(pageSetup.PageBreaks.VerticalPageBreaks); breaksToRemove.ForEach((br) => pageSetup.PageBreaks.TryRemoveVerticalPageBreak(0, br.Index)); } // Record the horizontal page breaks if necessary. } } } private void RestorePageBreaks(Workbook workbook) { foreach (Worksheet worksheet in workbook.Worksheets) { WorksheetPageSetup pageSetup = worksheet.WorksheetPageSetup; if (pageSetup.FitToPages) { List<PageBreak> cachedbreaks = this.verticalPageBreaksCache[worksheet]; if (pageSetup.FitToPagesWide != 0) { foreach (var pageBreak in cachedbreaks) { pageSetup.PageBreaks.TryInsertVerticalPageBreak(0, pageBreak.Index); } } // Restore the horizontal page breaks if necessary. } } }
Such objects are defined as oleObject elements in the XML. Currently, they are skipped on import.
Excel provides an option to choose whether cells with number cell value zero should display as "0" or as if they are empty. The option can be found in File -> Options -> Advanced -> "Show a zero in cells that have zero value". The option is set per sheet. The XML attribute is called "zeroValues" and it can be found on page 1625 in the format specification.
KeyNotFoundException is thrown on import. The number formats with id 5, 6, 7 and 8 are missing in the built-in number formats. Available in R2 2018 Official Release version.
At this point the culture used by RadSpreadProcessing (in the FormatHelper and internally in SpreadsheetCultureHelper) is determined by the current thread culture on startup. Provide ability to: - to change the culture at runtime. Currently, when the thread culture is changed, RadSpreadProcessing is "stuck" with the original one. - set this culture independently of the current thread's one.
When iterating through the rows and cells of an imported Worksheet in at least one of the rows GetValue().Value.ResultValueType for a number cell is set to GetValue().Value.ResultValueType.Text and the value to "error" or "string". For us this happens in a worksheet with 200 rows max. and columns formated as date, time, time followed by some text and number columns. In our Tests with different excel files it allways happened once (between line 11 and 16) and only for the first two columns. Exporting the worksheet back into a new excel file will show all rows and columns types and values OK.
RIGHT returns the last character or characters in a text string, based on the number of characters you specify. A list of the supported functions is available at http://docs.telerik.com/devtools/document-processing/libraries/radspreadprocessing/features/formulas/functions This function can be implemented as a custom function. Check the following resources for more details on how to achieve that: - http://docs.telerik.com/devtools/document-processing/libraries/radspreadprocessing/features/formulas/custom-functions - https://github.com/telerik/xaml-sdk/tree/master/Spreadsheet/WPF/CustomFunctions
Add support for TEXT function. The TEXT function allows changing the way a number appears by applying formatting to it using format codes. TEXT(value, format_text) A list of the supported functions is available at http://docs.telerik.com/devtools/document-processing/libraries/radspreadprocessing/features/formulas/functions This function can be implemented as a custom function. Check the following resources for more details on how to achieve that: - http://docs.telerik.com/devtools/document-processing/libraries/radspreadprocessing/features/formulas/custom-functions - https://github.com/telerik/xaml-sdk/tree/master/Spreadsheet/WPF/CustomFunctions
Add support for VALUE function. VALUE converts a text string that represents a number to a number. A list of the supported functions is available at http://docs.telerik.com/devtools/document-processing/libraries/radspreadprocessing/features/formulas/functions This function can be implemented as a custom function. Check the following resources for more details on how to achieve that: - http://docs.telerik.com/devtools/document-processing/libraries/radspreadprocessing/features/formulas/custom-functions - https://github.com/telerik/xaml-sdk/tree/master/Spreadsheet/WPF/CustomFunctions
IFERROR returns a value you specify if a formula evaluates to an error; otherwise, returns the result of the formula. A list of the supported functions is available at http://docs.telerik.com/devtools/document-processing/libraries/radspreadprocessing/features/formulas/functions This function can be implemented as a custom function. Check the following resources for more details on how to achieve that: - http://docs.telerik.com/devtools/document-processing/libraries/radspreadprocessing/features/formulas/custom-functions - https://github.com/telerik/xaml-sdk/tree/master/Spreadsheet/WPF/CustomFunctions
Split allows you to split the window into different panes that each scroll separately. This feature is different than the horizontal/vertical split of freeze panes, which is supported.
When there are split panes in a workbook, the topLeftCell property can be omitted. In this case, the format provider throws NullReferenceException.
The ADDRESS function is used to obtain the address of a cell in a worksheet, given specified row and column numbers. For example, ADDRESS(2,3) returns $C$2.
The r attribute of a cell defines the reference the cell is pointing to in a style similar to A1. Setting this attribute is optional but when set to an empty string, it cannot be imported - an ArgumentException is thrown with message "cellName" by the Guard class in NameConverter.ConvertCellNameToIndex(). Here is an example of such a definition: <row r="1" spans="1:12"> <c r=""/> </row> MS Excel and Libre Office can open such documents.
XLSB is binary format that should theoretically allow fast reading and writing to the file.
Excel exports shapes as TwoCellAnchor elements, which specifies the top left and the bottom right location of a shape. The size of the shape is recorded in the extents element (a:ext), cx and cy attributes. At the moment, the spreadsheet import first looks at the extents element and if it doesn't find the size there, calculates it from the TwoCellAnchor element. However, if an XLSX document has a shape with incorrect size indicated in the extents element, Excel will still be able to open it correctly, probably because it looks at the TwoCellAnchor element. RadSpreadsheet/SpreadProcessing, on the other hand, will show the image with an incorrect size.
Add API for registering custom image decoders, e.g. for .emf and .wmf images.