MS Excel offers the following text styling options:
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.
I'm working on a project that has a service component that will be generating Excel xlsx documents for distribution. While there is a UI for administrative tasks, the service itself will run without an interface. I'm using the Documents.Core, and several other associated libraries to accomplish this. Two issues I've encountered, one is setting up the project with the appropriate libraries and keeping the version in sync with the Admin application, second is protecting those libraries once they are packaged for release. I had a support ticket open to determine how to accomplish the latter, but the first is still a manual issue.
So the feature request is to include the ability in the project templates and/or Convert to Telerik WPF Application to support a headless document solution. It would ideally include (only) the required libraries and maintain their linkage to the appropriate library version with the rest of the solution which occurs with a full Telerik WPF UI app. It would also include the necessary boilerplate code and references to properly protect the libraries. I was referred to another feedback request on improving the overall library protection build process, but while related, what I'm asking for here is not exactly the same.