J'apprends OpenXML. J'ai cherché pendant des heures à trouver comment faire une tâche simple: insérer du texte dans un contrôle de contenu en C#.OpenXML insérer du texte dans le contrôle du contenu Word 2007
J'ai un document modèle avec deux contrôles "Nom" et "Âge". Je peux les trouver assez bien, mais je ne peux pas y ajouter de texte. J'ai essayé un certain nombre de choses, mais en vain.
byte[] templateBytes = System.IO.File.ReadAllBytes(fileName);
using (MemoryStream templateStream = new MemoryStream())
{
templateStream.Write(templateBytes, 0, (int)templateBytes.Length);
using (WordprocessingDocument outDoc = WordprocessingDocument.Open(templateStream, true))
{
MainDocumentPart mainPart = outDoc.MainDocumentPart;
foreach (SdtElement sdt in mainPart.Document.Descendants<SdtElement>().ToList())
{
SdtAlias alias = sdt.Descendants<SdtAlias>().FirstOrDefault();
if (alias != null)
{
string sdtTitle = alias.Val.Value;
switch (sdtTitle)
{
case "Name":
// ¿Qué?
break;
case "Age":
// ¿Qué?
break;
}
}
}
outDoc.ChangeDocumentType(DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
}
using (FileStream fileStream = new FileStream(savePath, System.IO.FileMode.CreateNew))
{
templateStream.WriteTo(fileStream);
}
}
Tout aide grandement apprécié.
Cheers,
Tim.
EDITER -
Merci pour la réponse. Prenant votre conseil, j'ai essayé de lancer et de forer avec l'outil de productivité pour trouver les éléments enfants à mettre à jour. Pourriez-vous me dire si vous pouvez voir pourquoi ce code n'écrit rien au document?
foreach (SdtElement sdt in mainPart.Document.Descendants<SdtElement>().ToList())
{
SdtAlias alias = sdt.Descendants<SdtAlias>().FirstOrDefault();
if (alias != null)
{
SdtRun xRun = (SdtRun)sdt;
SdtContentRun xContentRun = xRun.Descendants<SdtContentRun>().FirstOrDefault();
Run xRun = xContentRun.Descendants<Run>().FirstOrDefault();
Text xText = xRun.Descendants<Text>().FirstOrDefault();
string sdtTitle = alias.Val.Value;
switch (sdtTitle)
{
case "Name":
xText.Text = "Whatever";
break;
case "Age":
xText.Text = "69";
break;
}
}
}
Salut, vous avez xRun déclaré deux fois, donc Visual Studio ne compile pas. Voici le changement: [code] Exécutez xRun2 = xContentRun.Descendants() .FirstOrDefault(); [/ code] –