Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique montre comment utiliser les classes du Kit de développement logiciel (SDK) Open XML pour Office afin de supprimer par programmation du texte masqué d’un document de traitement de texte.
Structure d’un document WordProcessingML
La structure de base d’un WordProcessingML
document se compose des document
éléments et body
, suivis d’un ou plusieurs éléments de niveau bloc tels que p
, qui représente un paragraphe. Un paragraphe contient un ou plusieurs r
éléments. l’acronyme r
de run, qui est une région de texte avec un ensemble commun de propriétés, telles que la mise en forme. Une exécution contient un ou plusieurs t
éléments. L’élément t
contient une plage de texte. L’exemple de code suivant montre le WordprocessingML
balisage d’un document qui contient le texte « Exemple de texte ».
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:t>Example text.</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
À l’aide du Kit de développement logiciel (SDK) Open XML, vous pouvez créer une structure de document et du contenu à l’aide de classes fortement typées qui correspondent à WordprocessingML
des éléments. Vous trouverez ces classes dans l’espace de DocumentFormat.OpenXml.Wordprocessing noms . Le tableau suivant répertorie les noms de classes des classes qui correspondent aux document
éléments , body
, p
, r
et t
.
Élément WordprocessingML | Classe du Kit de développement logiciel (SDK) Open XML | Description |
---|---|---|
<document/> |
Document | Élément racine de la partie principale du document. |
<body/> |
Body | Conteneur des structures de niveau bloc, telles que paragraphs, tables, annotations et autres structures décrites dans la spécification ISO/IEC 29500. |
<p/> |
Paragraph | Paragraphe. |
<r/> |
Run | Exécution. |
<t/> |
Text | Plage de texte. |
Pour plus d’informations sur la structure globale des parties et éléments d’un document WordprocessingML, consultez Structure d’un document WordprocessingML.
Structure de l’élément vanish
L’élément vanish
joue un rôle important dans le masquage du texte dans un fichier Word. La Hidden
propriété de mise en forme est une propriété bascule, ce qui signifie que son comportement diffère entre son utilisation dans une définition de style et son utilisation comme mise en forme directe. Dans le cadre d’une définition de style, l’affectation d’une valeur à cette propriété entraîne la modification ou non de son état actuel.
La définition de la valeur false
(ou d’un équivalent) permet de conserver le paramètre actuel inchangé. Toutefois, lorsqu’il est utilisé comme mise en forme directe, définissez-la sur true
ou false
définit l’état absolu de la propriété résultante.
Les informations suivantes de la spécification ISO/IEC 29500 introduisent l’élément vanish
.
vanish (texte masqué)
Cet élément spécifie si le contenu de cette séquence doit être masqué lors de l’affichage d’un document. [Remarque : le paramétrage doit affecter l’affichage normal du texte, mais une application peut modifier les paramètres en forçant l’affichage du texte masqué. Fin de la remarque]
Cette propriété de mise en forme est une propriété bascule (§17.7.3).
Si cet élément n’est pas présent, la valeur par défaut est de laisser la mise en forme appliquée au niveau précédent dans la hiérarchie de style. Si cet élément n’est jamais appliqué dans la hiérarchie de style, ce texte ne doit pas être masqué lorsqu’il est affiché dans un document.
[Exemple : voici une séquence de texte dont la propriété de masquage du texte est activée pour le contenu de la séquence. Cette contrainte est spécifiée à l’aide de la syntaxe WordprocessingML suivante :
<w:rPr>
<w:vanish />
</w:rPr>
Cette séquence déclare que la propriété vanish est définie pour le contenu de la séquence ; par conséquent, le contenu de cette séquence est masqué lors de l’affichage du contenu du document. Fin de l’exemple]
© ISO/IEC 29500 : 2016
Le segment de schéma XML suivant définit le contenu de cet élément.
<complexType name="CT_OnOff">
<attribute name="val" type="ST_OnOff"/>
</complexType>
La val
propriété dans le code ci-dessus est une valeur binaire qui peut être activée ou désactivée. Si la valeur on
est , 1
ou true
la propriété est activée. Si la valeur off
est , 0
ou false
la propriété est désactivée.
Fonctionnement du code
La WDDeleteHiddenText
méthode fonctionne avec le document que vous spécifiez et supprime tous les run
éléments masqués et supprime les éléments supplémentaires vanish
. Le code commence par ouvrir le document, en utilisant la Open méthode et en indiquant que le document doit être ouvert pour l’accès en lecture/écriture (paramètre true final). Étant donné le document ouvert, le code utilise la MainDocumentPart propriété pour accéder au document main, en stockant la référence dans une variable.
using (WordprocessingDocument doc = WordprocessingDocument.Open(docName, true))
{
Obtenir une liste d’éléments disparus
Le code vérifie d’abord que doc.MainDocumentPart
et doc.MainDocumentPart.Document.Body
ne sont pas null et lève une exception s’il en manque une. Utilise ensuite le Descendants() qui lui passe le Vanish type pour obtenir un IEnumerable
des Vanish
éléments et les caste en liste.
if (doc.MainDocumentPart is null || doc.MainDocumentPart.Document.Body is null)
{
throw new ArgumentNullException("MainDocumentPart and/or Body is null.");
}
// Get a list of all the Vanish elements
List<Vanish> vanishes = doc.MainDocumentPart.Document.Body.Descendants<Vanish>().ToList();
Supprimer des exécutions avec du texte masqué et des éléments vanish supplémentaires
Pour supprimer le texte masqué, nous effectuons ensuite une boucle sur les List
éléments .Vanish
L’élément Vanish
est un enfant de , RunProperties mais RunProperties
peut être un enfant d’un Run ou xref :DocumentFormat.OpenXml.Wordprocessing.ParagraphProperties>. Nous obtenons donc le parent et le grand-parent de chaque Vanish
et case activée son type. Ensuite, si le grand-parent est un Run
, nous supprimons qui s’exécutent et si ce n’est pas nous supprimons les Vanish
éléments enfants du parent.
// Loop over the list of Vanish elements
foreach (Vanish vanish in vanishes)
{
var parent = vanish?.Parent;
var grandparent = parent?.Parent;
// If the grandparent is a Run remove it
if (grandparent is Run)
{
grandparent.Remove();
}
// If it's not a run remove the Vanish
else if (parent is not null)
{
parent.RemoveAllChildren<Vanish>();
}
}
Exemple de code
Remarque
Cet exemple suppose que le fichier en cours d’ouverture contient du texte masqué. Pour masquer une partie du texte du fichier, sélectionnez-la, puis cliquez sur Ctrl+D afin d’afficher la boîte de dialogue Police. Activez la case à cocher Masqué, puis cliquez sur OK.
Voici l’exemple de code complet en C# et en Visual Basic.
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
using System.Collections.Generic;
using System.Linq;
static void WDDeleteHiddenText(string docName)
{
// Given a document name, delete all the hidden text.
using (WordprocessingDocument doc = WordprocessingDocument.Open(docName, true))
{
if (doc.MainDocumentPart is null || doc.MainDocumentPart.Document.Body is null)
{
throw new ArgumentNullException("MainDocumentPart and/or Body is null.");
}
// Get a list of all the Vanish elements
List<Vanish> vanishes = doc.MainDocumentPart.Document.Body.Descendants<Vanish>().ToList();
// Loop over the list of Vanish elements
foreach (Vanish vanish in vanishes)
{
var parent = vanish?.Parent;
var grandparent = parent?.Parent;
// If the grandparent is a Run remove it
if (grandparent is Run)
{
grandparent.Remove();
}
// If it's not a run remove the Vanish
else if (parent is not null)
{
parent.RemoveAllChildren<Vanish>();
}
}
}
}