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.

PowerPoint.Application.Presentations falta MsoTriState.

Estoy tratando de automatizar un proceso utilizando PowerPoint desde C#, para hacer esto quiero abrir (o crear una nueva) presentación de PowerPoint, añadir una diapositiva y guardar el documento.

Tengo instalado todo el paquete de Office 2019 en mi máquina y puedo acceder a la API de PowerPoint haciendo referencia a “Interop.Microsoft.Office.Interop.PowerPoint” (desde la referencia de Microsoft PowerPoint 16.0 Object Library) junto con “Interop.Microsoft.Office.Core” (desde la referencia de Microsoft Office 16.0 Object Library).

Intento abrir un PowerPoint usando el siguiente código:

using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;

class PowerPointManager
{
    public PowerPointManager()
    {
        string powerPointFileName = @"C:\temp\test.pptx";

        Application pptApplication = new Application();
        Presentation ppt = pptApplication.Presentations.Open(powerPointFileName, MsoTriState.msoTrue); //MsoTriState viene de Microsoft.Office.Core

    }
}

Sin embargo, esto resulta en un error en la línea “pptApplication.Presentations.Open”.

Error CS0012 El tipo ‘MsoTriState’ está definido en un ensamblado al que no se hace referencia. Debes añadir una referencia al ensamblado ‘office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c’

A pesar de que “MsoTriState” está definitivamente definido en “Microsoft.Office.Core” que es parte del ensamblado “office.dll” (referencia de MSDN)

Cuando intento usar las acciones rápidas de VS2019, tengo la opción de “Añadir referencia a ‘office Version 15.0.0.0′”. Al realizar esta acción rápida se abre el Administrador de Referencias, pero no añade ninguna referencia. La búsqueda manual de “Office” tampoco arroja ningún resultado simplemente llamado “office”. Lo más cercano es “Microsoft Office 16.0 Object Library”, que ya está referenciado.

Según puedo ver, esto es el mismo MsoTriState que se está solicitando como parámetro de la función, entonces ¿por qué no lo está aceptando? Intentar sustituir el valor de MsoTriState por su valor entero (por ejemplo, -1 para verdadero) tampoco funciona.

Utilizo .NET Core 3.1 WinForms, con Office 2019 (incluido PowerPoint) 32 bits, en W10 x64 enterprise y Visual Studio 2019 con el kit de herramientas de desarrollo de Office/SharePoint instalado.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que se requiere la versión 15.0.0.0 de la biblioteca de ensamblado office.dll, la cual no está actualmente referenciada. Sin embargo, la referencia Microsoft.Office.Core debería proporcionar el tipo MsoTriState requerido, según indica la documentación de Microsoft.

    Una solución para solucionar este error es agregar manualmente una referencia a la versión 15.0.0.0 de la biblioteca de ensamblado office.dll al proyecto.

    Para hacer esto, haga clic derecho en la carpeta “Referencias” en el Explorador de soluciones y elija “Agregar referencia”. En la ventana Administrador de referencias, seleccione “Examinar” y navegue hasta la carpeta donde se encuentra la versión 15.0.0.0 de la biblioteca de ensamblado office.dll (generalmente en la carpeta de instalación de Office en “Archivos de programa”). Una vez agregada la referencia, reconstruya el proyecto e intente ejecutar el código nuevamente.

    Otra solución es intentar usar una versión diferente de la referencia Microsoft.Office.Core, como la versión que coincide con la versión instalada de Office (16.0.0.0). Para hacer esto, elimine la referencia actual Microsoft.Office.Core del proyecto y vuelva a agregarla desde la pestaña COM en la ventana del Administrador de referencias.

    Es importante tener en cuenta que para automatizar PowerPoint desde C# se requiere tener instalada una licencia válida de Office en la máquina.

Comments are closed.