Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

320
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda