es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Unir 2 documentos de Word usando c#

Estoy tratando de fusionar 2 documentos de Word en formato binario, sin embargo, solo obtiene el primer documento. El documento resultante debería tener todos los elementos de cada documento fuente incluidos con el formato.

Aquí está el código hasta ahora. Usando OpenXml por cierto.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para fusionar 2 documentos de Word en formato binario y asegurarse de que se incluyen todos los elementos de cada documento fuente con formato, es necesario modificar el código de la siguiente manera:

    1. En lugar de usar solo un AlternativeFormatImportPart para almacenar el documento fuente, crear varias partes para importar cada documento.
    2. Cargar cada documento fuente en su propia AlternativeFormatImportPart.
    3. Agregar un AltChunk para cada AlternativeFormatImportPart al documento principal.
    4. Guardar el documento principal con todos los AltChunks incluidos.

    Aquí hay una versión actualizada del método Merge:

    private static byte[] Merge(byte[] dest, byte[] src)
    {
        var memoryStreamDest = new MemoryStream(dest);
        using (WordprocessingDocument doc = WordprocessingDocument.Open(memoryStreamDest, true))
        {
            MainDocumentPart mainPart = doc.MainDocumentPart;
    
            // Crear un ID único para cada documento fuente
            string altChunkIdPrefix = "AltChunkId";
            int altChunkCount = mainPart.AlternativeFormatImportParts.Count() + 1;
            string altChunkId = altChunkIdPrefix + altChunkCount;
    
            // Agregar una nueva AlternativeFormatImportPart para el documento fuente
            AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(
                AlternativeFormatImportPartType.WordprocessingML, altChunkId);
    
            // Cargar el documento fuente en la AlternativeFormatImportPart
            using (MemoryStream mem = new MemoryStream(src))
            {
                chunk.FeedData(mem);
            }
    
            // Insertar un AltChunk para el documento fuente
            AltChunk altChunk = new AltChunk();
            altChunk.Id = altChunkId;
            mainPart.Document.Body.InsertAfter(altChunk, mainPart.Document.Body.LastChild);
    
            // Guardar el documento principal con todos los AltChunks incluidos
            mainPart.Document.Save();
        }
    
        return memoryStreamDest.ToArray();
    }
    

    Con este código actualizado, se puede llamar al método Merge varias veces para fusionar cualquier número de documentos de Word en formato binario.

Comments are closed.