Je construis un addin de mot qui a deux cases à cocher pour swabbing entre la vue TEXT et la vue XML. Et dans le visionnement XML, je limite l'édition. Lorsque l'utilisateur revient à la visualisation TEXT, je supprime la restriction pour l'édition. Le code:Word addin essayant d'afficher à la fois XML et texte, mais si le texte a une image le fichier doc corrompu?
private void ShowDocBodyXML_Click(object sender, RibbonControlEventArgs e)
{
var doc = Globals.DLPAddIn.Application.ActiveDocument;
doc.Save();
string fileName = doc.FullName;
doc.Close();
using (WordprocessingDocument document = WordprocessingDocument.Open(fileName, true))
{
MainDocumentPart mainPart = document.MainDocumentPart;
Body body = mainPart.Document.Body;
string text = body.InnerXml;
body.RemoveAllChildren();
DocumentFormat.OpenXml.Wordprocessing.Paragraph para = body.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text(text));
}
Globals.DLPAddIn.Application.Documents.Open(fileName);
doc = Globals.DLPAddIn.Application.ActiveDocument;
object missing = System.Reflection.Missing.Value;
doc.Protect(Microsoft.Office.Interop.Word.WdProtectionType.wdAllowOnlyReading,
missing, missing, missing, missing);
doc.Save();
}
private void ShowDocBodyText_Click(object sender, RibbonControlEventArgs e)
{
var doc = Globals.DLPAddIn.Application.ActiveDocument;
object missing = System.Reflection.Missing.Value;
if (doc.ProtectionType != WdProtectionType.wdNoProtection)
doc.Unprotect(missing);
doc.Save();
string fileName = doc.FullName;
doc.Close();
using (WordprocessingDocument document = WordprocessingDocument.Open(fileName, true))
{
MainDocumentPart mainPart = document.MainDocumentPart;
Body body = mainPart.Document.Body;
string text = body.InnerText;
body.RemoveAllChildren();
body.InnerXml = text;
}
Globals.DLPAddIn.Application.Documents.Open(fileName);
}
Le code fonctionne avec tout problème, mais si la Parole Doc ont une image lorsque l'utilisateur essaie de revenir à l'affichage de texte de la l'exception de jet de code (Le fichier a été corrompu) dans ce code:
Globals.DLPAddIn.Application.Documents.Open(fileName);
Je pense que quand je l'éditer limiterai supprimer le fichier image. Si c'est comme ça, comment puis-je résoudre ce problème.
Il est pas vraiment possible d'être sûr de ce qui se passe à ce supprimer. Je soupçonne que le problème peut résider dans la façon dont le contenu du document est modifié, pas avec la protection ou la non-protection. Les images sont généralement enregistrées en tant que fichiers de ressources distincts dans le package zip. Les relations sont créées et maintenues pour lier le fichier graphique dans le texte principal. Word peut supprimer la relation (par exemple) lorsque le document est enregistré à nouveau. –
La comparaison d'une copie du document original avec la version ronde peut révéler où le "déconnecter" se produit. Utilisez la fonctionnalité "Comparer les documents" de l'outil de productivité Open XML SDK pour inspecter où et comment les deux diffèrent. –
Merci Cindy Meister vous avez raison. Le dossier multimédia du package zip a été supprimé avec la relation qui appartient à l'image dans le fichier document.xml.rels. Et cela arrive après doc.Protect (..). Si je supprime doc.Protect (..), il enregistre le document sans supprimer le dossier multimédia et la relation. Je veux dire que c'est un bon travail. Mais si je fais doc.Protect (..). Il enlève l'image. Alors, comment puis-je résoudre le problème? – hoss77