InvalidCastException 'Unable to cast object of type 'EffectContainerElement' to type 'EffectListElement' is thrown on import.
As a workaround, you can either use the old version of the assemblies (R2 2022) or you can set ImportSettings.SkipShapes of the DocxFormatProvider to true.
The table styles are not imported correctly from HTML. The back color is not respected. The column width is incorrect. The font size is different.
Font is not in proper case- All the cases are in lower case
In excel, if you set word wrap to cell content, make the column wider and then autofit the column in which it is, the content will fit to a reasonable width, as seen in the image below.
When doing the same in SpreadProcessing, the result is always a narrow column:
CellSelection cellSelection = sheet.Cells[0, 0];
cellSelection.SetIsWrapped(true);
ColumnSelection columnSelection = sheet.Columns[0];
columnSelection.SetWidth(new ColumnWidth(100, true));
columnSelection.AutoFitWidth();Result:
Here are the same steps performed in WPF RadSpreadsheet, which uses RadSpreadProcessing for its engine:
Workaround: this is the missing part after the export:
We use the PDF viewer in an WPF project and see sometimes faulty pdfs in the telerik viewer. If I open the pdf file in acrobat it lloks fine. Do you know this problem ?
Attached you find the original file and a screenshot from PDF viewer. Other files are shown correct in the telerik viewer.
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:
There may be more with this same pattern, I haven't checked.
When creating a data bar conditional formatting with middle axis, a plain data bar with left axis is created instead. Using the following code:
var dataBarValueContext = new DataBarValueContext
{
MaximumValue = new NumericValue(1),
MinimumValue = new NumericValue(-1)
};
// Create the rule and set the desired formatting
var rule = new DataBarRule(dataBarValueContext)
{
UseGradientFill = false,
Direction = DataBarDirection.Context,
FillColor = ThemableColor.FromColor(Colors.Green),
NegativeFillColor = ThemableColor.FromColor(Colors.Red),
ShowBarsOnly = true,
AxisPosition = DataBarAxisPosition.Automatic
};
var conditionalFormat = new ConditionalFormatting(rule);
worksheet.Cells[0, 0, 1, 0].AddConditionalFormatting(conditionalFormat);
worksheet.Cells[0, 0].SetValue(0.5);
worksheet.Cells[1, 0].SetValue(-0.5);
The expected value is this:
The result value is instead:
Currently EULA requires Telerik assemblies to be protected against unauthorized redistribution, by following specific guidelines for the different types of technology: - for WPF: https://docs.telerik.com/devtools/wpf/installation-and-deployment/deploying-telerik-ui/protecting-telerik-assembly - for ASP.NET AJAX: https://docs.telerik.com/devtools/aspnet-ajax/deployment/protecting-the-telerik-asp.net-ajax-assembly - for WinForms: https://docs.telerik.com/devtools/winforms/installation-deployment-and-distribution/redistributing-telerik-ui-for-winforms When the guidelines for WinForms or AJAX are followed (namely the call to ValidatePassPhrase() is uncommented in AssemblyProtection.IsValid() method, the following license message is added to the generated documents: "This document was generated by a copy of Telerik Document Processing licensed for use only by '<MyApp>'." Workaround: Set the application name as resource in the Application.Current, using the following code:where 'MyApp' should be replaced with the actual application name. References to PresentationFramework and WindowsBase .NET Framework assemblies should be added in order for this approach to work.newSystem.Windows.Application();System.Windows.Application.Current.Resources.Add("Telerik.Windows.Controls.Key","MyApp");