Può capitare di dover accedere ad un documento di Word da un'applicazione Silverlight e dover effettuare delle personalizzazioni nel documento stesso.
Se l'applicazione viene eseguita in OOB, con Elevated Trusted, è possibile accedere direttamente alle applicazioni Office e ad altre funzionalità.
E' possibile, ad esempio, istanziare un oggetto di tipo Word per lavorare direttamente su documenti di tipo DOC, o DOCX, dalla nostra applicazione.
E' necessario importare alcuni namespace per poter lavorare con questi oggetti:
using System.Windows.Interop; using System.Runtime.Interopservices.Automation;
A questo punto, dal code behind di una Silverlight page possiamo istanziare un oggetto di tipo Word:
dynamic wordDocument = AutomationFactory.CreateObject("Word.Application");
Il problema ora è come pilotare l'oggetto wordDocument appena creato.
Un esempio classico potrebbe essere quello di aprire un documento con degli appositi segnalibri, ricercarli e personalizzare il documento, quindi salvarlo con un altro nome ed inviarlo per email al nostro destinatario.
Per sapere quali metodi l'oggetto creato mette a disposizione può essere utile registrare una macro in direttamente Microsoft Word, che faccia quello appunto di cui abbiamo bisogno, in questo caso cercare un segnalibro e sostituire il codice presente con un nostro testo personalizzato.
La macro registrata si presenta in questo modo:
Sub TrovaBookmarks() Selection.GoTo What:=wdGoToBookmark, Name:="Oggetto" Selection.Find.ClearFormatting With Selection.Find .Text = "Vecchio Testo" .Replacement.Text = "Nuovo Testo" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With End Sub
A questo punto è facile convertire il codice VBA in C#, in questo caso ed implementarlo all'interno del nostro codice:
if (App.Current.IsRunningOutOfBrowser && App.Current.HasElevatedPermissions) { dynamic wordDocument = AutomationFactory.CreateObject("Word.Application"); object path = @"C:\" + dialog.File.Name; object paramMissing = Type.Missing; wordDocument.Documents.Open(ref path, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing); object bookmark = -1; object nameBookmark = "oggetto"; wordDocument.Selection.GoTO(bookmark, paramMissing, paramMissing, nameBookmark); wordDocument.Selection.TypeText("NUOVO TESTO"); }
L'oggetto wordDocument è a tutti gli effetti Word, quindi il suo potenziale è limitato solo dalla fantasia nel creare applicazioni che lo sfruttino in tutti i modi possibili.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Generare token per autenicarsi sulle API di GitHub
Creazione di plugin per Tailwind CSS: espandere le Funzionalità del Framework
Creare alias per tipi generici e tuple in C#
Creare moduli CSS in React
Usare le variabili per personalizzare gli stili CSS
Definire stili a livello di libreria in Angular
Controllare gli accessi IP alle app con Azure Container Apps
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Eseguire query verso tipi non mappati in Entity Framework Core
Elencare le container images installate in un cluster di Kubernetes
Disabilitare automaticamente un workflow di GitHub
Potenziare Azure AI Search con la ricerca vettoriale
I più letti di oggi
- Riordinare le righe di una GridView di ASP.NET con jQuery
- Creazione di un alarm con suono personalizzato con Windows Phone 7.1
- Utilizzare la session affinity con Azure Container Apps
- Blue-green deployment con Azure Web App e DevOps
- Ed infine anche il calendario :)
- Configurare la diagnostica di Azure attraverso Visual Studio
- Recuperare la data di creazione di un tag tramite una pipeline YAML di Azure DevOps
- Microsoft Security Bulletin MS05-002
- .NET Core e dispositivi IoT
- Eseguire attività pianificate con Azure Container Jobs