Compartir a través de


Tutorial: Crear un nuevo proyecto de Office mediante la automatización de proyectos en Visual Studio

En este tutorial se muestra cómo crear una macro que use el modelo de objetos de Visual Studio para automatizar la creación de un proyecto de Office. En el proyecto se utiliza la configuración personalizada de Asistente para proyectos de Visual Studio Tools para Office, en lugar de los valores predeterminados del proyecto.

Se aplica a: la información de este tema se aplica a los proyectos de nivel de documento para Excel 2010. Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto de Office.

El código crea un nuevo proyecto con una configuración de asistente personalizada para que el proyecto automatizado se cree utilizando un libro de Microsoft Office Excel existente en lugar de crear un libro nuevo.

Para obtener más información sobre macros, vea Automatizar acciones repetitivas mediante macros.

En este tutorial se muestran las tareas siguientes:

  • Crear una nueva macro de Visual Studio.

  • Crear un archivo de plantilla temporal (.vstemplate) con una configuración personalizada.

  • Establecer parámetros para un asistente e iniciar el asistente.

Requisitos previos

Necesita los componentes siguientes para completar este tutorial:

-

Una edición de Visual Studio 2010 que incluye las herramientas para desarrolladores de Microsoft Office. Para obtener más información, vea [Configurar un equipo para desarrollar soluciones de Office](bb398242\(v=vs.100\).md).
  • Excel 2010.

Crear el libro de Excel

Debe crear un libro de Excel que se utilizará como libro existente en el nuevo proyecto.

Para crear el libro de Excel

  1. Cree una carpeta con el nombre CreateNewFile en la unidad C del equipo.

  2. Cree una subcarpeta en CreateNewFile con el nombre Test: C:\CreateNewFile\Test.

  3. Abra Excel 2010.

  4. Escriba Éste es el libro CreateNewFile en la celda A1.

  5. Guarde el libro como CreateNewFile.xls en la ubicación C:\CreateNewFile.

  6. Cierre Excel.

La subcarpeta Test se utiliza como ubicación para el proyecto finalizado.

Crear una macro nueva

En este paso creará una nueva macro de Visual Studio vacía.

Para crear una macro nueva

  1. Abra Visual Studio y cierre todos los proyectos abiertos.

  2. En el menú Herramientas, elija Macros y después haga clic en IDE de macros.

    Se abre el entorno de desarrollo integrado (IDE) de Macros de Microsoft Visual Studio.

  3. Expanda el nodo MyMacros si aún no está expandido.

  4. En el menú Proyecto, haga clic en Agregar módulo.

  5. Asigne el nombre CreateNewProject al módulo y, a continuación, haga clic en Agregar.

El nuevo módulo se abre en el IDE de macros. Ahora puede agregar código para crear un nuevo proyecto.

Crear un archivo de plantilla (.vstemplate)

Para crear un nuevo proyecto con la configuración predeterminada del asistente se utiliza uno de los archivos de plantilla predefinidos. En Visual Studio, la configuración predeterminada del proyecto consiste en crear un documento o un libro nuevo para usarlo en el proyecto. Para utilizar en el proyecto un libro existente, debe generar un archivo .vstemplate temporal personalizado con la configuración correcta.

Para obtener más información sobre archivos .vstemplate, vea Plantillas de Visual Studio.

Para utilizar un documento existente, agregue el parámetro personalizado VSTOExistingDocumentPath al archivo .vstemplate.

Para generar un archivo .vsz temporal

  1. Haga clic en la opción Agregar referencia del menú Proyecto.

  2. Seleccione System.Xml.dll haga clic en Agregar y, a continuación, en Aceptar.

  3. Agregue las instrucciones Imports siguientes al principio del archivo de código.

    Imports System.Xml
    Imports System.IO
    
  4. En el módulo CreateNewProject, agregue el método siguiente para definir el contenido de la carpeta de plantillas temporal.

    Sub CreateVstemplateFile(ByVal defaultTemplateFilePath As String, _
        ByVal templateFilePath As String, ByVal docFilePath As String)
    
        ' Copy the default template in the temporary location.
        Dim defaultTemplateDirectory = _
            Path.GetDirectoryName(defaultTemplateFilePath)
        Dim templateDirectory = Path.GetDirectoryName(templateFilePath)
        If Not Directory.Exists(templateDirectory) Then
            Directory.CreateDirectory(templateDirectory)
        End If
        For Each fileToCopy As String In Directory. _
            GetFiles(defaultTemplateDirectory)
            File.Copy(fileToCopy, Path.Combine(templateDirectory, _
                Path.GetFileName(fileToCopy)), True)
        Next
    
        ' Create the vstemplate namespace.
        Dim vstemplateNamespace As String = _
            "https://schemas.microsoft.com/developer/vstemplate/2005"
    
        ' Load the XML document.
        Dim doc As XmlDocument = New XmlDocument()
        doc.Load(templateFilePath)
        Dim xmlNsManager As XmlNamespaceManager = _
            New XmlNamespaceManager(doc.NameTable)
        xmlNsManager.AddNamespace("vstemplns", vstemplateNamespace)
    
        ' Get 'CustomParameters' XML node.
        Dim customParametersNode As XmlNode = doc.SelectSingleNode( _
            "/vstemplns:VSTemplate/vstemplns:TemplateContent/" _
            & "vstemplns:CustomParameters", xmlNsManager)
    
        ' Create a new XML CustomParameter node with 
        ' the existing document data.
        ' <CustomParameter Name="VSTOExistingDocumentPath" _
        ' Value="C:\CreateNewFile\CreateNewFile.xls" />
        Dim newNode As XmlNode
        newNode = doc.CreateElement("CustomParameter", _
            vstemplateNamespace)
        Dim nameAttribute As XmlAttribute
        nameAttribute = doc.CreateAttribute("Name")
        Dim valueAttribute As XmlAttribute
        valueAttribute = doc.CreateAttribute("Value")
    
        nameAttribute.Value = "VSTOExistingDocumentPath"
        valueAttribute.Value = docFilePath
    
        newNode.Attributes.Append(nameAttribute)
        newNode.Attributes.Append(valueAttribute)
    
        customParametersNode.AppendChild(newNode)
        doc.Save(templateFilePath)
    End Sub
    

El método siguiente define los parámetros y llama al método LaunchWizard.

Iniciar el asistente

Para crear un proyecto nuevo, utilice el método LaunchWizard del objeto DTE.

Para iniciar el asistente

  • Agregue el método siguiente al módulo CreateNewProject para rellenar la matriz de parámetros e iniciar el asistente:

    Sub LaunchWizard(ByVal projectName As String, _
        ByVal projectFolder As String, _
        ByVal templateFilePath As String)
    
        Dim params(6) As Object
    
        ' New project.
        params(0) = "{0F90E1D0-4999-11D1-B6D1-00A0C90F2744}"
    
        ' Project name.
        params(1) = projectName
    
        ' Project location.
        params(2) = projectFolder
    
        ' Install location.
        params(3) = ""
    
        ' Close solution.
        params(4) = False
    
        ' Solution name.
        params(5) = ""
    
        ' Silent - do not display any user interface.
        params(6) = False
    
        DTE.LaunchWizard(templateFilePath, params)
    End Sub
    

Por último, agregue un método para llamar a los dos métodos que ha creado y pasar los parámetros adecuados.

Crear el proyecto

Con el siguiente método se definen y pasan los parámetros correctos para los métodos CreateVstemplateFile y LaunchWizard.

Para crear el proyecto

  1. Agregue el método siguiente al módulo CreateNewProject:

    Sub CreateProject()
        Dim sol As Solution2 = DTE.Solution
    
        ' Get the path of the default .vstemplate file using 
        ' the name of the template zip file and the language.
        ' The zip files are "VSTOExcelWorkbook.zip", 
        ' "VSTOExcelTemplate.zip", ' "VSTOWordDocument.zip", 
        ' or "VSTOWordTemplate.zip".
        ' The languages are "VisualBasic" and "CSharp".
        Dim defaultTemplateFilePath As String = _
            sol.GetProjectTemplate("VSTOExcel2010WorkbookV4.zip", _
            "VisualBasic")
    
        ' Get the temporary .vstemplate file containing 
        ' the specification.
        Dim templateDirectory As String = "C:\CreateNewFile\template"
        Dim templateFilePath = Path.Combine(templateDirectory, _
            Path.GetFileName(defaultTemplateFilePath))
    
        ' Get an existing document to use in project creation.
        Dim docFilePath As String = "C:\CreateNewFile\CreateNewFile.xls"
    
        ' Create a temporary template with the wizard specification.
        CreateVstemplateFile(defaultTemplateFilePath, _
            templateFilePath, docFilePath)
    
        ' Launch the CreateProject wizard.
        Dim projectName As String = "CreateNewFile"
        Dim projectFolder As String = "c:\CreateNewFile\test"
        LaunchWizard(projectName, projectFolder, templateFilePath)
    End Sub
    
  2. Guarde la macro.

  3. Cierre el IDE de macros.

Probar la macro

Ahora puede probar la macro para asegurarse de que crea un proyecto nuevo.

Para probar la macro

  1. En el menú Herramientas, elija Macros y después haga clic en el Explorador de macros.

  2. En el Explorador de macros, bajo MyMacros, expanda la macro CreateNewProject.

  3. Bajo CreateNewProject, haga doble clic en CreateProject.

    Se abre el Asistente para proyectos de Visual Studio Tools para Office.

  4. En la página Seleccione un documento para la aplicación, haga clic en Aceptar.

  5. Compruebe que se crea el proyecto nuevo en la subcarpeta Test.

Vea también

Tareas

Cómo: Agregar hojas de cálculo a libros mediante la automatización de proyectos de Visual Studio

Cómo: Cambiar propiedades de Excel mediante la automatización de proyectos de Visual Studio

Conceptos

Ejemplos de extensibilidad de proyectos de Visual Basic y Visual C#

Otros recursos

Extensibilidad en los proyectos de Office