Unplanned
Last Updated: 18 Jan 2017 07:12 by ADMIN
When printing or exporting to PDF, the left border of A1 cell is not printed/rendered.
Unplanned
Last Updated: 17 Jan 2017 16:05 by ADMIN
When there is some long number value in merged cell and this cell is autofit, then in Excel the cell is visualized with "#####" because the column width is not enough.

Workaround: As a workaround in some scenarios it is possible to call Merge method after AutoFitWidth method in order get the correct column width.
Completed
Last Updated: 20 Jun 2016 13:19 by ADMIN
Unplanned
Last Updated: 12 Dec 2016 14:23 by ADMIN
Define name which we can import looks like this:

<definedName name="Test">Sheet1!$A$1</definedName>

The case which can not be handled by RadSpreadProcessing looks like this:

<definedName name="Test"><![CDATA[Sheet1!$A$1]]></definedName>

The CDATA element is used to escape the inner text in order not to be parsed as XML. That means this is а valid case, and RadSpreadProcessing should handle it.
Completed
Last Updated: 22 Feb 2017 11:54 by ADMIN
When there is a defined name referring many cells with long values, the Value of the defined name is string which does not contains the values of all the referred cells and ends with "...".
Declined
Last Updated: 09 Dec 2016 09:52 by ADMIN
ADMIN
Created by: Nikolay Demirev
Comments: 0
Category: SpreadProcessing
Type: Feature Request
0
The item is closed as duplicated of https://feedback.telerik.com/Project/184/Feedback/Details/190065-spreadprocessing-implement-right-to-left-direction.
Completed
Last Updated: 13 Oct 2016 06:51 by ADMIN
The way the RadSpreadProcessing decides if a row should be exported works slow. It iterates through all the rows in the UsedCellRange and checks if some property is set and if not, checks if some cell is set. This is slow because each row is checked one by one.
Completed
Last Updated: 22 Feb 2017 11:54 by ADMIN
Xlsx documents with global print area defined cannot be imported. Message box "The name that you entered is not valid." is shown and internally SpreadsheetNameException is thrown. 
By default, print areas are defined in the xlsx files for specific spreadsheet:
<definedName name="_xlnm.Print_Area" localSheetId="0">Sheet1!$A$1</definedName>
but this one is without localSheetId property specified.

MS Excel can import such document and even preserve the area, but do not respect it and doesn't have UI to clear it.

By OOXML specification, this attribute is optional:
<xsd:attribute name="localSheetId" type="xsd:unsignedInt" use="optional"/>

Workaround 1 (includes processing the document with MS Excel):
- Open the document in MS Excel
- Choose Formulas -> Defined names -> Named Manager
- Choose Filter -> Names with errors
- Find all Print_Area defined names and delete them
- Save the document

Workaround 2:
- Delete all print areas with OpenXML SDK


Available in LIB version: 2017.1.213
Unplanned
Last Updated: 22 Feb 2017 11:56 by ADMIN
The data validation is working. However, the text can't be localized by MS Excel with installed non-English language pack after import/export with SpreadProcessing. The problem is caused by an interpretation of the data validation rule as a text instead of as a formula.
Unplanned
Last Updated: 09 Jan 2017 11:39 by ADMIN
ADMIN
Created by: Tanya
Comments: 0
Category: SpreadProcessing
Type: Feature Request
0
The COUNT function counts the number of cells which contain numbers.

Description from Microsoft here: https://support.office.com/en-US/article/COUNT-function-A59CD7FC-B623-4D93-87A4-D23BF411294C.

Workaround: Implement such a custom function. See Custom Functions help article here: http://docs.telerik.com/devtools/document-processing/libraries/radspreadprocessing/features/formulas/custom-functions .
Unplanned
Last Updated: 20 Feb 2018 09:25 by ADMIN
Unplanned
Last Updated: 30 Apr 2018 13:59 by ADMIN
ADMIN
Created by: Tanya
Comments: 0
Category: SpreadProcessing
Type: Feature Request
0
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
Unplanned
Last Updated: 04 Aug 2017 15:03 by ADMIN
There are scenarios when the default value of the columns is changed and may be different from 65. However, RadSpreadprocessing always exports the non-custom column values as 65.

WORKAROUND: After importing the XLSX file you may make all columns to have custom values in order to preserve the column widths after the export. The following code snippet shows how this may be achieved for some Worksheet instance:

CellRange usedRange = worksheet.UsedCellRange;

for (int i = 0; i < usedRange.ColumnCount; i++)
{
    ColumnSelection column = worksheet.Columns[i];
    double width = column.GetWidth().Value.Value;
    column.SetWidth(new ColumnWidth(width, true));
}
Completed
Last Updated: 28 Aug 2017 08:28 by ADMIN
An InvalidOperationException could be thrown in multi-threaded export to XLSX format. However, the problem is not verified.

Here is the stacktrace:

ERROR System.InvalidOperationException: isParsing must be true.
   at Telerik.Windows.Documents.Spreadsheet.Utilities.Guard.ThrowExceptionIfTrue(Boolean param, String paramName)
   at Telerik.Windows.Documents.Spreadsheet.Model.Printing.HeaderFooterSectionTextParser.OnBeforeParse(String headerFooterSectionText)
   at Telerik.Windows.Documents.Spreadsheet.Model.Printing.HeaderFooterSectionTextParser.Parse(String headerFooterSectionText)
   at Telerik.Windows.Documents.Spreadsheet.Model.Printing.HeaderFooterSectionTextSanitizer.Sanitize(String sectionText)
   at Telerik.Windows.Documents.Spreadsheet.Model.Printing.HeaderFooterContent.BuildContentText()
   at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.Model.Elements.Worksheets.HeaderFooterElement.WriteChild[T](OpenXmlChildElement`1 child, HeaderFooterContent content)
   at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.Model.Elements.Worksheets.HeaderFooterElement.WriteChildren(HeaderFooterSettings settings)
   at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.Model.Elements.Worksheets.HeaderFooterElement.OnBeforeWrite(IXlsxWorksheetExportContext context)
   at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.Model.Elements.Worksheets.WorksheetElementBase.OnBeforeWrite(IXlsxWorkbookExportContext context)
   at Telerik.Windows.Documents.FormatProviders.OpenXml.Model.Elements.OpenXmlElementBase`3.OnBeforeWrite(IOpenXmlExportContext context)
   at Telerik.Windows.Documents.FormatProviders.OpenXml.Model.Elements.OpenXmlElementBase.Write(IOpenXmlWriter writer, IOpenXmlExportContext context)
   at Telerik.Windows.Documents.FormatProviders.OpenXml.Model.Elements.OpenXmlElementBase.Write(IOpenXmlWriter writer, IOpenXmlExportContext context)
   at Telerik.Windows.Documents.FormatProviders.OpenXml.Model.Parts.OpenXmlPartBase.Export(IOpenXmlWriter writer, IOpenXmlExportContext context)
   at Telerik.Windows.Documents.FormatProviders.OpenXml.Export.OpenXmlExporter`2.ExportPart(OpenXmlPartBase part, TContext context)
   at Telerik.Windows.Documents.FormatProviders.OpenXml.Export.OpenXmlExporter`2.Export(Stream output, TContext context, OpenXmlExportSettings settings)
   at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.XlsxFormatProvider.ExportOverride(Workbook workbook, Stream output)
   at Telerik.Windows.Documents.Spreadsheet.FormatProviders.WorkbookFormatProviderBase.Export(Workbook workbook, Stream output)

Available in LIB Version 2017.2.828.
Completed
Last Updated: 01 Sep 2021 12:14 by ADMIN
Release R2 2021
When a csv is exported the entire range which has values is exported. When export is done in Excel, the cells of this range which are empty are marked by an additional field, separated by a comma. This comma is present in SpreadProcessing only in places where it is obligatory for example in the middle of the row. Obligatory comma in this context means that without it the file will not be read correctly by Excel or SpreadProcessing. In places where it is not obligatory, like in an empty row or in the end of the row, it is skipped. These non-obligatory commas do not influence how the file will be interpreted by Excel, however, according to the most-popular csv spec, they should be present, which means that there could be parsers which are unable to parse the resulting file. (2.4 Each line should contain the same number of fields throughout the file.) 

Example:
Exported by Excel:
---------------------------------------
Product,Unit Price,Units in Stock,Discontinued
Chai,$18.00 ,39,
Chang,,17,
Chef Anton's Cajun Seasoning,$22.00 ,53,No
,,,
Chef Anton's Gumbo Mix,$21.35 ,0,No
---------------------------------------
Exported by SpreadProcessing:
---------------------------------------
Product,Unit Price,Units in Stock,Discontinued
Chai,$18.00 ,39
Chang,,17
Chef Anton's Cajun Seasoning,$22.00 ,53,No

Chef Anton's Gumbo Mix,$21.35 ,0,No
---------------------------------------
Note the extra commas in the empty row and in the end of the first two rows in the SpreadProcessing sample.
Unplanned
Last Updated: 30 Apr 2018 14:00 by ADMIN
ADMIN
Created by: Tanya
Comments: 0
Category: SpreadProcessing
Type: Feature Request
0
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
Declined
Last Updated: 08 May 2018 13:00 by ADMIN
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.

Unplanned
Last Updated: 15 Jun 2018 11:44 by ADMIN
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.
Unplanned
Last Updated: 31 Jul 2018 07:27 by ADMIN
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.
                }
            }
        }
Unplanned
Last Updated: 22 Aug 2018 13:14 by ADMIN
When a format code like "General" x"" is applied on e.g. 1, the result is "1 x". At the moment, the result with Spreadprocessing is "General x"