Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

317
Views
Cómo copiar el contenido del control de contenido de texto enriquecido de un documento de Word y eliminar el control mediante Open XML SDK

Estoy tratando de copiar el contenido de los controles de contenido de texto enriquecido de un documento de Word a otro. Cada uno de los controles de contenido de texto enriquecido contiene un bloque de texto y algunos controles de contenido de texto sin formato. El siguiente código parece funcionar...

 using (WordprocessingDocument doc = WordprocessingDocument.Open(destinationFile, true)) { MainDocumentPart mainPart = doc.MainDocumentPart; Dictionary<string, SdtBlock> sdtBlocks = getContentControlsFromDocument(sourceFile); foreach (KeyValuePair<string, SdtBlock> sdtBlock in sdtBlocks) { SdtElement control = mainPart.Document.Body.Descendants<SdtElement>().Where(r => { var tag = r.SdtProperties.GetFirstChild<Tag>(); return tag != null && tag.Val == sdtBlock.Key.ToLower(); }).FirstOrDefault(); SdtContentBlock cloneSdtContentBlock = (SdtContentBlock)sdtBlock.Value.Descendants<SdtContentBlock>().FirstOrDefault().Clone(); control.Parent.InsertAfter(cloneSdtContentBlock, control); control.Remove(); } mainPart.Document.Save(); }

pero cuando trato de encontrar todos los controles de contenido dentro del archivo de destinationFile usando el código a continuación

 string key = "tag_name"; List<SdtElement> controls = mainPart.Document.Body.Descendants<SdtElement>().Where(r => { var tag = r.SdtProperties.GetFirstChild<Tag>(); return tag != null && tag.Val == key.ToLower(); }).ToList();

No puedo encontrar los que estaban/están dentro del control de contenido de texto enriquecido copiado de sourceFile . En otras palabras, me gustaría copiar solo el contenido del Control de contenido de texto enriquecido sin el control en sí.

Actualizar:

Para simplificar la pregunta. Tengo un control de contenido de texto enriquecido que puede tener texto sin formato y un par de controles de contenido de texto sin formato. Todo lo que necesito es copiar (solo) el contenido dentro de este Control de contenido de texto enriquecido que envuelve todo en otro documento de Word.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Mientras tanto logré resolver el problema yo mismo. Aquí está la solución por lo que podría ser útil para alguien más.

 using (WordprocessingDocument doc = WordprocessingDocument.Open(@"C:\tmp\test-1.docx", true)) { MainDocumentPart mainPart = doc.MainDocumentPart; foreach (var conditialTemplate in conditionalTemplates) { List<SdtElement> controls = mainPart.Document.Body.Descendants<SdtElement>().Where(r => { var tag = r.SdtProperties.GetFirstChild<Tag>(); return tag != null && tag.Val == conditialTemplate.ToLower(); }).ToList(); foreach (var control in controls) { if (control != null) { SdtProperties props = control.Elements<SdtProperties>().FirstOrDefault(); Tag tag = props.Elements<Tag>().FirstOrDefault(); Console.WriteLine("Tag: " + tag.Val); string theRightBlock = "A"; SdtBlock theRightSdtBlock = GetTheRightConditionalSdtBlock(theRightBlock, tag.Val); if (theRightSdtBlock != null) { OpenXmlElement parent = control.Parent; SdtBlock clone = new SdtBlock(); clone = (SdtBlock)theRightSdtBlock.Clone(); var elements = clone.GetFirstChild<SdtContentBlock>().ChildElements.ToList(); elements.Reverse(); elements.ForEach(child => { parent.InsertAfter(child.Clone() as OpenXmlElement, control); }); control.Remove(); } } } } mainPart.Document.Save(); }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!