Tutorial: Crear una plantilla mediante controles de contenido

En este tutorial, se muestra cómo crear una personalización de nivel de documento que use controles de contenido para crear contenido estructurado y reutilizable en una plantilla de Microsoft Office Word.

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

Word permite crear una colección de elementos del documento reutilizables, lo que se denomina bloques de creación. En este tutorial se muestra cómo se crean dos tablas como bloques de creación. Cada tabla alberga varios controles de contenido de diferente tipo, como texto sin formato o fechas. Una de las tablas contiene información sobre un empleado y la otra tabla contiene los comentarios de los clientes.

Después de crear un documento a partir de la plantilla, puede agregar cualquiera de las tablas al documento utilizando varios objetos BuildingBlockGalleryContentControl, que mostrarán los bloques de creación disponibles en la plantilla.

En este tutorial se muestran las tareas siguientes:

  • Crear tablas que contienen controles de contenido en una plantilla de Word en tiempo de diseño.

  • Rellenar un control de contenido de cuadro combinado y un control de contenido de lista desplegable mediante programación.

  • Impedir que los usuarios editen una determinada tabla.

  • Agregar tablas a la colección de bloques de creación de una plantilla.

  • Crear un control de contenido que muestre los bloques de creación disponibles en la plantilla.

Nota

Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio.

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).
  • Microsoft Office Word 2007 o Word 2010.

Crear un nuevo proyecto de plantilla de Word

Cree una plantilla de Word para que los usuarios puedan crear con facilidad sus propias copias.

Para crear un nuevo proyecto de plantilla de Word

  • Cree un proyecto de plantilla de Word con el nombre MyBuildingBlockTemplate. En el asistente, cree un nuevo documento en la solución. Para obtener más información, vea Cómo: Crear proyectos de Office en Visual Studio.

    Visual Studio abre la nueva plantilla de Word en el diseñador y agrega el proyecto MyBuildingBlockTemplate al Explorador de soluciones.

Crear la tabla del empleado

Cree una tabla que contenga cuatro tipos diferentes de controles de contenido donde el usuario pueda escribir información sobre un empleado.

Para crear la tabla del empleado

  1. En la plantilla de Word que se hospeda en el diseñador de Visual Studio, en el cinta de opciones, haga clic en la ficha Insertar.

  2. En el grupo Tablas, haga clic en Tabla e inserte una tabla con dos columnas y cuatro filas.

  3. En la primera columna, escriba texto de modo que se asemeje a la columna siguiente:

    Nombre del empleado

    Fecha de contratación

    Título

    Imagen

  4. Haga clic en la primera celda de la segunda columna (junto a Nombre del empleado).

  5. En la cinta de opciones, haga clic en la ficha Desarrollador.

    Nota

    Si la ficha Desarrollador no está visible, debe mostrarla primero. Para obtener más información, consulte Cómo: Mostrar la pestaña Programador en la cinta de opciones.

  6. En el grupo Controles, haga clic en el botón Texto PlainTextContentControl para agregar un control PlainTextContentControl en la primera celda.

  7. Haga clic en la segunda celda de la segunda columna (junto a Fecha de contratación).

  8. En el grupo Controles, haga clic en el botón Selector de fecha DatePickerContentControl para agregar un control DatePickerContentControl a la segunda celda.

  9. Haga clic en la tercera celda de la segunda columna (junto a Puesto).

  10. En el grupo Controles, haga clic en el botón Cuadro combinado ComboBoxContentControl para agregar un control ComboBoxContentControl en la tercera celda.

  11. Haga clic en la última celda de la segunda columna (junto a Foto).

  12. En el grupo Controles, haga clic en el botón Control de contenido de imagen PictureContentControl para agregar un control PictureContentControl en la última celda.

Crear la tabla de comentarios de clientes

Cree una tabla que contenga tres tipos diferentes de controles de contenido en los que el usuario pueda escribir información sobre los comentarios de los clientes.

Para crear la tabla de comentarios de los clientes

  1. En la plantilla de Word, haga clic en la línea situada a continuación de la tabla de empleados que agregó anteriormente y presione Entrar para agregar un nuevo párrafo.

  2. En la cinta de opciones, haga clic en la ficha Insertar.

  3. En el grupo Tablas, haga clic en Tabla e inserte una tabla con dos columnas y tres filas.

  4. En la primera columna, escriba texto de modo que se asemeje a la columna siguiente:

    Nombre del cliente

    Grado de satisfacción

    Comentarios

  5. Haga clic en la primera celda de la segunda columna (junto a Nombre del cliente).

  6. En la cinta de opciones, haga clic en la ficha Desarrollador.

  7. En el grupo Controles, haga clic en el botón Texto PlainTextContentControl para agregar un control PlainTextContentControl en la primera celda.

  8. Haga clic en la segunda celda de la segunda columna (junto a Grado de satisfacción).

  9. En el grupo Controles, haga clic en el botón Lista despegable DropDownListContentControl para agregar un control DropDownListContentControl en la segunda celda.

  10. Haga clic en la última celda de la segunda columna (junto a Comentarios).

  11. En el grupo Controles, haga clic en el botón Texto enriquecido RichTextContentControl para agregar un control RichTextContentControl en la última celda.

Rellenar el cuadro combinado y la lista desplegable mediante programación

Puede inicializar los controles de contenido en tiempo de diseño utilizando la ventana Propiedades de Visual Studio. También puede inicializarlos en tiempo de ejecución, de modo que pueda establecer sus estados iniciales dinámicamente. En este tutorial, utilice código para rellenar en tiempo de ejecución las entradas de los controles ComboBoxContentControl y DropDownListContentControl de modo que pueda ver cómo funcionan estos objetos.

Para modificar la interfaz de usuario de los controles de contenido mediante programación

  1. En el Explorador de soluciones, haga clic con el botón secundario en ThisDocument.cs o ThisDocument.vb y, a continuación, haga clic en Ver código.

  2. Agregue el código siguiente a la clase ThisDocument. Este código declara varios objetos que utilizará después en este tutorial.

    Private GroupControl1 As Microsoft.Office.Tools.Word.GroupContentControl
    Private BuildingBlockControl1 As Microsoft.Office.Tools.Word.BuildingBlockGalleryContentControl
    Private BuildingBlockControl2 As Microsoft.Office.Tools.Word.BuildingBlockGalleryContentControl
    
    private Microsoft.Office.Tools.Word.GroupContentControl groupControl1;
    private Microsoft.Office.Tools.Word.BuildingBlockGalleryContentControl buildingBlockControl1;
    private Microsoft.Office.Tools.Word.BuildingBlockGalleryContentControl buildingBlockControl2;
    
  3. Agregue el código siguiente al método ThisDocument_Startup de la clase ThisDocument. Este código agrega entradas a los controles ComboBoxContentControl y DropDownListContentControl de las tablas y establece el texto del marcador de posición que se muestra en cada uno de estos controles antes de que el usuario los edite.

    ComboBoxContentControl1.PlaceholderText = "Choose a title, or enter your own"
    ComboBoxContentControl1.DropDownListEntries.Add("Engineer", "Engineer", 0)
    ComboBoxContentControl1.DropDownListEntries.Add("Designer", "Designer", 1)
    ComboBoxContentControl1.DropDownListEntries.Add("Manager", "Manager", 2)
    
    DropDownListContentControl1.PlaceholderText = _
        "Choose a rating (1 lowest, 3 highest)"
    DropDownListContentControl1.DropDownListEntries.Add("1", "1", 0)
    DropDownListContentControl1.DropDownListEntries.Add("2", "2", 1)
    DropDownListContentControl1.DropDownListEntries.Add("3", "3", 2)
    
    comboBoxContentControl1.PlaceholderText = "Choose a title, or enter your own";
    comboBoxContentControl1.DropDownListEntries.Add("Engineer", "Engineer", 0);
    comboBoxContentControl1.DropDownListEntries.Add("Designer", "Designer", 1);
    comboBoxContentControl1.DropDownListEntries.Add("Manager", "Manager", 2);
    
    dropDownListContentControl1.PlaceholderText =
        "Choose a rating (1 lowest, 3 highest)";
    dropDownListContentControl1.DropDownListEntries.Add("1", "1", 0);
    dropDownListContentControl1.DropDownListEntries.Add("2", "2", 1);
    dropDownListContentControl1.DropDownListEntries.Add("3", "3", 2);
    

Impedir que los usuarios editen la tabla de empleados

Utilice el objeto GroupContentControl que declaró anteriormente para proteger la tabla de empleados. Después de proteger la tabla, los usuarios aún podrán modificar los controles de contenido de la tabla. Sin embargo, no podrán editar el texto de la primera columna ni modificar la tabla de ningún otro modo, añadiendo o eliminando filas y columnas, por ejemplo. Para obtener más información acerca de cómo se utiliza GroupContentControl para proteger un elemento de un documento, vea Controles de contenido.

Para impedir que los usuarios editen la tabla del empleado

  • Agregue el código siguiente al método ThisDocument_Startup de la clase ThisDocument después del código que agregó en el paso anterior. Este código impide que los usuarios editen la tabla de empleados; para ello, sitúe la tabla dentro del objeto GroupContentControl que declaró anteriormente.

    Me.Tables(1).Select()
    GroupControl1 = Me.Controls.AddGroupContentControl("groupControl1")
    
    this.Tables[1].Range.Select();
    groupControl1 = this.Controls.AddGroupContentControl("groupControl1");
    

Agregar tablas a la colección de bloques de creación

Agregue las tablas a una colección de bloques de creación del documento en la plantilla para que los usuarios puedan insertar las tablas que creó en el documento. Para obtener más información sobre los bloques de creación de documentos, vea Controles de contenido.

Para agregar tablas a los bloques de creación de la plantilla

  1. Agregue el código siguiente al método ThisDocument_Startup de la clase ThisDocument después del código que agregó en el paso anterior. Este código agrega nuevos bloques de creación que incluyen las tablas en la colección Microsoft.Office.Interop.Word.BuildingBlockEntries, que contiene todos los bloques de creación reutilizables de la plantilla. Los nuevos bloques de creación se definen en una nueva categoría denominada Información de empleados y clientes y se asigna al tipo de bloques de creación Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1.

    Dim template1 As Word.Template = TryCast(Me.AttachedTemplate, Word.Template)
    If template1 IsNot Nothing Then
    
        template1.BuildingBlockEntries.Add("Employee Table", _
            Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information", _
            Me.Tables(1).Range, InsertOptions:=Word.WdDocPartInsertOptions.wdInsertContent)
        template1.BuildingBlockEntries.Add("Customer Table", _
            Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information", _
            Me.Tables(2).Range, InsertOptions:=Word.WdDocPartInsertOptions.wdInsertContent)
    End If
    
    Word.Template template1 = this.AttachedTemplate as Word.Template;
    
    if (template1 != null)
    {
        object description = null;
        template1.BuildingBlockEntries.Add("Employee Table",
            Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information",
            this.Tables[1].Range, ref description, Word.WdDocPartInsertOptions.wdInsertContent);
        template1.BuildingBlockEntries.Add("Customer Table",
            Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information",
            this.Tables[2].Range, ref description, Word.WdDocPartInsertOptions.wdInsertContent);
    }
    
  2. Agregue el código siguiente al método ThisDocument_Startup de la clase ThisDocument después del código que agregó en el paso anterior. Este código elimina las tablas de la plantilla. Las tablas ya no son necesarias porque las agregó a la galería de bloques de creación reutilizables de la plantilla. El código sitúa primero el documento en modo de diseño para que se pueda eliminar la tabla de empleados protegida.

    If Me.FormsDesign = False Then
        Me.ToggleFormsDesign()
    End If
    Me.Tables(2).Delete()
    Me.Tables(1).Delete()
    Me.ToggleFormsDesign()
    
    if (!this.FormsDesign)
    {
        this.ToggleFormsDesign();
    }
    this.Tables[2].Delete();
    this.Tables[1].Delete();
    this.ToggleFormsDesign();
    

Crear un control de contenido que muestre los bloques de creación

Cree un control de contenido que proporcione acceso a los bloques de creación (es decir, a las tablas) que creó anteriormente. Los usuarios pueden hacer clic en este control para agregar las tablas al documento.

Para crear un control de contenido que muestre los bloques de creación

  • Agregue el código siguiente al método ThisDocument_Startup de la clase ThisDocument después del código que agregó en el paso anterior. Este código inicializa el objeto BuildingBlockGalleryContentControl que declaró anteriormente. El control BuildingBlockGalleryContentControl muestra todos los bloques de creación que se definen en el categoría Información de empleados y clientes y que tiene el tipo de bloque de creación Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1.

    BuildingBlockControl1 = Me.Controls.AddBuildingBlockGalleryContentControl( _
        Me.Paragraphs(1).Range, "buildingBlockControl1")
    BuildingBlockControl1.BuildingBlockCategory = "Employee and Customer Information"
    BuildingBlockControl1.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1
    BuildingBlockControl1.PlaceholderText = "Choose your first building block"
    
    BuildingBlockControl2 = Me.Controls.AddBuildingBlockGalleryContentControl( _
        Me.Paragraphs(2).Range, "buildingBlockControl2")
    BuildingBlockControl2.BuildingBlockCategory = "Employee and Customer Information"
    BuildingBlockControl2.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1
    BuildingBlockControl2.PlaceholderText = "Choose your second building block"
    
    buildingBlockControl1 = this.Controls.AddBuildingBlockGalleryContentControl(
        this.Paragraphs[1].Range, "buildingBlockControl1");
    buildingBlockControl1.BuildingBlockCategory = "Employee and Customer Information";
    buildingBlockControl1.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1;
    buildingBlockControl1.PlaceholderText = "Choose your first building block";
    
    buildingBlockControl2 = this.Controls.AddBuildingBlockGalleryContentControl(
        this.Paragraphs[2].Range, "buildingBlockControl2");
    buildingBlockControl2.BuildingBlockCategory = "Employee and Customer Information";
    buildingBlockControl2.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1;
    buildingBlockControl2.PlaceholderText = "Choose your second building block";
    

Probar el proyecto

Los usuarios pueden hacer clic en los controles de la galería de bloques de creación del documento para insertar la tabla de empleados o la tabla de comentarios de los clientes. Los usuarios pueden escribir o seleccionar las respuestas en los controles de contenido de ambas tablas. Los usuarios pueden modificar otros elementos de la tabla de comentarios de los clientes, pero no pueden modificar ningún otro elemento de la tabla del empleado.

Para probar la tabla del empleado

  1. Presione F5 para ejecutar el proyecto.

  2. Haga clic en Elija el primer bloque de creación para mostrar el primer control de contenido de la galería de bloques de creación.

  3. Haga clic en la flecha de lista desplegable situada junto al encabezado Personalizar Galería 1 del control y seleccione la tabla del empleado.

  4. Haga clic en la celda situada a la derecha de la celda Nombre del empleado y escriba un nombre.

    Compruebe que sólo puede agregar texto en esta celda. El control PlainTextContentControl sólo permite a los usuarios agregar texto, y no otros tipos de contenido, como una imagen o una tabla.

  5. Haga clic en la celda situada a la derecha de la celda Fecha de contratación y seleccione una fecha en el selector de fecha.

  6. Haga clic en la celda situada a la derecha de la celda Puesto y seleccione uno de los puestos del cuadro combinado.

    Si lo desea, también puede escribir el nombre de un puesto que no aparezca en la lista. Esto es posible porque ComboBoxContentControl permite a los usuarios seleccionar una opción en una lista de entradas o escribir sus propias entradas.

  7. Haga clic en el icono de la celda situada a la derecha de la celda Foto y busque una imagen para mostrarla.

  8. Intente agregar filas o columnas a la tabla e intenta eliminarlas. Comprobará que no puede modificar la tabla. El control GroupContentControl impide que puedan hacerse modificaciones.

Para probar la tabla de comentarios de los clientes

  1. Haga clic en Elija el segundo bloque de creación para mostrar el segundo control de contenido de la galería de bloques de creación.

  2. Haga clic en la flecha de lista desplegable situada junto al encabezado Personalizar Galería 1 del control y seleccione la tabla de clientes.

  3. Haga clic en la celda situada a la derecha de la celda Nombre del cliente y escriba un nombre.

  4. Haga clic en la celda situada a la derecha de la celda Grado de satisfacción y seleccione una de las opciones disponibles.

    Comprobará que no puede escribir su propia entrada. El control DropDownListContentControl sólo permite a los usuarios seleccionar una opción de una lista de entradas.

  5. Haga clic en la celda situada a la derecha de Comentarios y escriba algunos comentarios.

    Si lo desea, también puede agregar otro contenido que no sea texto, como una imagen o una tabla incrustada. Esto es posible porque RichTextContentControl permite a los usuarios agregar contenido distinto del texto.

  6. Compruebe que puede agregar filas o columnas a la tabla y que puede eliminarlas. Esto es posible porque no ha protegido la tabla situándola en GroupContentControl.

  7. Cierre la plantilla.

Pasos siguientes

Puede obtener más información acerca de cómo se utilizan los controles de contenido en este tema:

Vea también

Tareas

Cómo: Agregar controles de contenido a documentos de Word

Cómo: Proteger elementos de documentos mediante controles de contenido

Conceptos

Automatizar Word con objetos extendidos

Controles de contenido

Información general sobre elementos y controles Host

Limitaciones de programación de elementos y controles Host

Agregar controles a documentos de Office en tiempo de ejecución

Métodos auxiliares para controles host