Unplanned
Last Updated: 29 Jan 2024 10:38 by Ye

If a worksheet has page breaks, but Fit to pages is also set to true, the page breaks should not be respected.

Workaround: Remove the page breaks before printing:

wb.ActiveWorksheet.WorksheetPageSetup.PageBreaks.Clear();

 

Unplanned
Last Updated: 26 Feb 2024 15:11 by hyuk

When importing a document containing a Plain Text SDT with multiple paragraphs an exception is thrown:

Telerik.Windows.Documents.Flow.Model.Annotations.StructuredDocumentTags.Builders.SdtBuilderFailureException: "This content control type cannot be inserted around multiple paragraphs."

Completed
Last Updated: 15 May 2024 06:28 by ADMIN
Release 2024.2.426 (2024 Q2)
Created by: Daniel
Comments: 0
Category: Telerik Document Processing
Type: Feature Request
0
The ImageInline class in the WordsProcessing library has a Description available as a property of the Image property. The FloatingImage class also has an Image property but it is internal and its Description property is not available for users of the SpreadProcessing library.
Completed
Last Updated: 13 Nov 2024 09:23 by ADMIN
Release 2024.3.802 (2024 Q3)
Exporting specific documents with fields to PDF causes NullReferenceException.
Completed
Last Updated: 02 Aug 2024 11:09 by ADMIN
Release 2024.3.802 (2024 Q3)

When a format string of type: _ * # ##0_ ;_ * -# ##0_ ;_ * "-"??_ ;_ @_  is set through code and the culture settings of the machine are set so that the number grouping symbol is space, the resulting format string comes out incorrect on export: _,*,# ##0_,;_,*,-# ##0_,;_,*,"-"??_,;_,@_, 

This will happen every time the symbols in-between and after _ and * coincide with the number group separator.

Unplanned
Last Updated: 31 Jul 2024 15:10 by Christian

After Excel introduced the dynamic array support, files produced with the older Excel versions have formulas that may be displayed with @ in some contexts. For example a file that had the following:

=SUM(IF(A1:A10=1, B1:B10, 0))

Will be displayed like so:

=SUM(IF(@A1:A10=1, B1:B10, 0))

This is done in order to preserve the behavior of the files created in older versions of Excel.

The files created by SpreadProcessing are also treated by Excel as if they are created by pre-dynamic array Excel. Please, introduce support for the new behavior.

Unplanned
Last Updated: 17 Sep 2024 14:36 by Shailaja
At the moment the only data that can be passed to FloatingChartShape is a CellRange to be parsed to a chart. Some clients would like to use the IChartData implementations: NumericChartData and StringChartData. We need a FloatingChartShape constructors like this:

public FloatingChartShape(Worksheet worksheet, CellIndex cellIndex, IChartData values, IChartData categories)

And others if necessary.
Completed
Last Updated: 12 Feb 2025 15:18 by ADMIN
Release 2025.1.205 (2025 Q1)
The export method of the WorkbookFormatProviderBase does not use its timeout parameter.
Completed
Last Updated: 22 May 2025 13:36 by ADMIN
Release 2025.2.520 (2025 Q2)
When importing an existing document which contains a GoToR action, we should preserve the action even after exporting it.
Completed
Last Updated: 22 May 2025 13:36 by ADMIN
Release 2025.2.520 (2025 Q2)
When the line spacing of the paragraph is set to "at least" and the line spacing value is smaller than the font size, Word makes the actual value of the line spacing to be larger in order not to squish the lines. During export to HTML, Word skips the line spacing in such case, in order to preserve the same effect. WordsProcessing exports the line spacing, which causes the lines to become squished.
Declined
Last Updated: 02 May 2025 06:24 by ADMIN
When trying to pass the ByteArray as an argument to PDFFormatProvider .Import I get the following error.

PdfFormatProvider provider = new PdfFormatProvider();
 RadFixedDocument fixedDocument = provider.Import(document.ByteArray);

System.NullReferenceException: Object reference not set to an instance of an object.
   at Telerik.Windows.Documents.Fixed.FormatProviders.Pdf.Import.RadFixedDocumentImportContext.BeginImportOverride()
   at Telerik.Windows.Documents.Fixed.FormatProviders.Pdf.Import.BaseImportContext.BeginImport(Stream pdfFileStream)
   at Telerik.Windows.Documents.Fixed.FormatProviders.Pdf.Import.PdfImporter.Import(Stream input, IPdfImportContext context)
   at Telerik.Windows.Documents.Fixed.FormatProviders.Pdf.PdfFormatProvider.<>c__DisplayClass19_0.<ImportOverride>b__0()
   at Telerik.Windows.Documents.Fixed.FormatProviders.Pdf.ExceptionHandling.ExecutionHandler.TryHandleExecution[E](Action operation)
   at Telerik.Windows.Documents.Fixed.FormatProviders.Pdf.PdfFormatProvider.ImportOverride(Stream input, CancellationToken cancellationToken)
   at Telerik.Windows.Documents.Fixed.FormatProviders.Pdf.PdfFormatProvider.ImportOverride(Stream input)
   at Telerik.Windows.Documents.Common.FormatProviders.FormatProviderBase`1.Import(Stream input)
   at Telerik.Windows.Documents.Common.FormatProviders.BinaryFormatProviderBase`1.Import(Byte[] input)

I have attached the PDF I'm trying to import.

Unplanned
Last Updated: 13 Jun 2025 10:08 by ADMIN

In the 2025 version of the Documents packages, "TimeSpan? timeout" were added to a number of interfaces, with the old versions obsoleted, for example: IWorkbookFormatProvider.Import & IWorkbookFormatProvider.Export.

This is a very strange choice, because this limits the flexibility of the interfaces for no reason at all. By only providing the TimeSpan parameter and not a CancellationToken is currently impossible to cancel the operation because e.g. an API request was canceled.

Internally these methods are implemented by first creating a cancellation token using

using CancellationTokenSource cancellationTokenSource = CancelationTokenSourceFactory.CreateTokenSource(timeout);

the token from this CancellationTokenSource is then passed to a protected method. Because this internal method uses a CancellationToken anyway, there is practically 0 development cost to exposing this in the interface, which makes the choice not to do so even more confusing.

The interfaces should expose methods that take a CancellationToken instead of a TimeSpan. This would allow for the same functionality as the TimeSpan parameter, by simply passing a cancellation token with a CancelAfter set with a TimeSpan, and an extension method could be provided for the interface which does exactly that, so users can still call these methods with a TimeSpan parameter if they wish to do so for convenience.

Please, in the next version, make these interfaces methods like this:

Workbook Import(Stream input, CancellationToken cancellationToken = default);
void Export(Workbook workbook, Stream output, CancellationToken cancellationToken = default);

and, for convenience, add extension methods for these like this:

public static class WorkbookFormatProviderExtensions
{
    public static Workbook Import(this IWorkbookFormatProvider workbookFormatProvider, Stream input, TimeSpan? timeout)
    {
        using CancellationTokenSource cancellationTokenSource = CancelationTokenSourceFactory.CreateTokenSource(timeout);
        return workbookFormatProvider.Import(input, cancellationTokenSource.Token);
    }
}

Affected interfaces I've run into so far:

  • Telerik.Windows.Documents.Spreadsheet.FormatProviders.IWorkbookFormatProvider
  • Telerik.Windows.Documents.Common.FormatProviders.IFormatProvider<T>

There may be more with this same pattern, I haven't checked.

Unplanned
Last Updated: 17 Jun 2025 07:09 by ADMIN

Read the documentation for CancelationTokenSource.CancelAfter:

this method will throw an ArgumentOutOfRangeException when: delay.TotalMilliseconds is less than -1 or greater than Int32.MaxValue (or UInt32.MaxValue - 1 on some versions of .NET). Note that this upper bound is more restrictive than TimeSpan.MaxValue.

----------------------------------------------------

your code in CancelationTokenSourceFactory.CreateTokenSource does this check:

if (timeSpan.HasValue && timeSpan.Value != TimeSpan.MaxValue)

this check for TimeSpan.MaxValue seems totally pointless here, if timeSpan is anything between ~2147483647 and 922337203685476 milliseconds long this will still just throw a ArgumentOutOfRangeException.

I suspect that this check was intended as a way to prevent creating a cancellation timer that never triggers in the CancellationTokenSource, which should look like this:

if (timeSpan.HasValue && timeSpan != Timeout.InfiniteTimeSpan) //Timeout.InfiniteTimeSpan is -1 milliseconds
which still seems like premature optimization with no noticeable benefit but at least it isn't completely pointless.
2 3 4 5 6 7