Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Para habilitar la impresión de reportes desde el .NET Framework hay que usar el
Namespace System.Drawing.Printing que contiene objetos útiles para manejar tareas de
impresión.
La clase PrintDocument es la que permite crear el objeto de impresión, por lo cual describimos
sus principales características:
♦ Propiedades
♦ Métodos
♦ Eventos
crear una página a imprimir con un simple mensaje mediante el objeto PrintDocument y
realizar un preview de ésta mediante el control PrintPreviewControl.
El ejemplo trabaja con un simple formulario conteniendo un texto y dos botones donde se
debe ingresar un mensaje, el cual se puede ver como saldrá impreso mediante el botón
"Preview" o imprimir mediante el botón "Print".
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 586 -
1. En el diseñador de formularios Windows, arrastrar 1 control Label, 1 TextBox, 2 Button y 1
PrintDocument, luego configurar las propiedades, tal como se muestra en el siguiente
cuadro:
2. Escribir un texto cualquiera en el cuadro de texto y clic en el botón "Preview" para ver
como aparecerá la salida.
3. Cierre la ventana del Preview y luego si tiene una impresora instalada clic en el botón
"Print" para realizar la impresión.
CODIGO DE FORMULARIO
TAREA
Modifque otras propiedades del preview por ejemplo, como imprimir valores de un cuadro
de lista o estos valores
.Dock = DockStyle.Left
.Zoom = 10
Dim Brocha As New SolidBrush(Color.FromArgb(255, 0, 0))
El ejemplo trabaja con un formulario que al cargar se conecta a la base de datos "alumnos"
de SQL Server y ejecuta un comando que llena una tabla de un DataSet con los códigos,
nombres y FechaNac de la tabla alumnos. A partir de esta tabla se crea una vista la cual se
enlaza a un control DataGridview..
La aplicación tiene un menú principal con una opción de Reporte donde se puede realizar
Preview de los datos usando el PrintPreviewControl o imprimirlos usando el método Print
del objeto PrintDocument.
Para ver la demostración debemos realizar los siguientes pasos:
Imports System.Data.SqlClient
Imports System.Text 'StringBuilder maneja cadenas
Public Class Form1
Inherits System.Windows.Forms.Form
Private dvw As DataView
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\SI2011\DATOS\ALUMNOS2.mdf;Integrate
d Security=True;Connect Timeout=30;User Instance=True"
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 589 -
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select CodAlumno,NombreAlumno,FechaNac
From Alumnos", con)
Dim dst As New DataSet()
dap.Fill(dst, "Alumnos")
dvw = dst.Tables("Alumnos").DefaultView
DataGridView1.DataSource = dvw
End Sub
Private Sub CrearPagina(ByVal sender As System.Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim i As Integer
Dim stb As New StringBuilder()
Dim Texto As String
Dim Fuente As New Font("Courier New", 12)
Dim Brocha As Brush = Brushes.Blue
Dim X As Integer = e.MarginBounds.Left
Dim Y As Integer = e.MarginBounds.Top
e.Graphics.DrawString("REPORTE DE ALUMNOS", Fuente, Brocha, X, Y)
Y = Y + 30
For i = 0 To dvw.Count - 1
stb.Append(dvw(i)(0).ToString.PadRight(10))
stb.Append(dvw(i)(1).ToString.PadRight(25))
stb.Append(dvw(i)(2).ToString.PadRight(15))
Texto = stb.ToString
e.Graphics.DrawString(Texto, Fuente, Brocha, X, Y)
Y = Y + Fuente.GetHeight
stb.Length = 0
Next
End Sub
Private Sub MostrarPreview(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuPrevio.Click
Dim ppc As New PrintPreviewControl()
ppc.Document = PrintDocument1
ppc.Zoom = 1
ppc.Dock = DockStyle.Fill
Dim frmPreview As New Form()
With frmPreview
.Text = "Preview del Reporte de Alumnos"
.WindowState = FormWindowState.Maximized
.Controls.Add(ppc)
.ShowDialog()
End With
End Sub
Private Sub ImprimirReporte(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuPrint.Click
PrintDocument1.Print()
End Sub
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 590 -
End Class
Ejemplo 3. Modifique el ejemplo anterior de tal manera que obtenga reportes de acuerdo
a una consulta ingresada por el usuario en un inputbox por ejemplo listar los subtotales por
año
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 592 -
Imports System.Data.SqlClient
Imports System.Text 'StringBuilder maneja cadenas
Public Class Form1
Inherits System.Windows.Forms.Form
Private dvw As DataView
Dim dst As New DataSet()
Dim cadenaSQL As String
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\SI2011\DATOS\ALUMNOS2.mdf;Integrate
d Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("", con)
.WindowState = FormWindowState.Maximized
.Controls.Add(ppc)
.ShowDialog()
End With
End Sub
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 594 -
Private Sub ImprimirReporte(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuPrint.Click
PrintDocument1.Print()
End Sub
Nota en caso que la tabla tenga muchos registros solo se puede mostrar una pagina del
reporte como se ve en la figura
Ls diálogos de impresión se pueden usar junto al objeto PrintDocument para realizar una
mejor presentación y configuración de la impresión.
Para trabajar con el diálogo de Preview, tan sólo hay que configurar la propiedad Document
del diálogo en el objeto Prin Document, tal como sigue:
objPrintPreviewDialog.Document ■ objPrintDocument
Para trabajar con el diálogo de configuración de página hay que configurar la propiedad
Document del diálogo en el objeto PrintDocument, tal como sigue:
objPageSetupDialog.Document = objPrintDocument
obj PageSetupDialog.ShowDialog()
Además para recuperar toda la configuración del diálogo para que pueda ser usada por la
impresión, asignar en la propiedad DefaultPageSettings del objeto PrintDocument la
propiedad PageSettings del diálogo, tal como sigue:
Para trabajar con el diálogo de impresión, también hay que configurar la propiedad Document
del diálogo en el objeto PrintDocument, tal como sigue:
objPrintDialog.Document = objPrintDocument
Ejemplo 4 crear una pagina a imprimir con un simple mensaje mediante el objeto
PrintDocument y usar los diálogos de presentación preliminar, de configuración de página y
de impresión. ( Demo 67)
El ejemplo es similar al Demo65, es decir, trabaja con un simple formulario conteniendo un texto
y tres botones donde se debe ingresar un mensaje, el cual se puede ver como saldrá impreso
mediante el botón "Preview", configurar la página mediante el botón "Page Setup" o imprimir
mediante el botón "Print".
Nota:
a) En el código anterior las variables X e Y son usadas para imprimir el texto a partir
del margen actual.
b) En el código anterior no se configura el zoom por código ya que el diálogo automáticamente
presenta botones de Zoom y otros botones.
c) En el código anterior no se configura el DefaultPageSettings del PríntDocument ya que
el diálogo lo realiza en forma automática.
d) En el código anterior se configura las propiedades Allow del diálogo para permitir mostrar
selección de páginas en el diálogo de impresión. También si el . usuario da clic en el botón
"OK" del dialogo de imprimir, entonces, se imprime el contenido del cuadro de texto.
.
4 Proceda a configurar la página cambiando el tamaño del papel, la orientación y los
márgenes, luego clic en "Aceptar" para cerrar el diálogo y realizar los cambios.
5 Nuevamente de clic en el botón "Preview" para ver la presentación de la página con los
cambios realizados, después cierre el diálogo de Preview.
6 Clic en el botón "Print" y se presentará el diálogo de impresión, similar al mostrado en la
figura
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 600 -
Ejemplo 3 . Esta demostración tiene por objetivo enseñar a crear un documento con varias
páginas de datos obtenidos desde una base de datos. En ésta trabajaremos con todos los
diálogos de impresión. (Demo 68)
La aplicación tiene un menú principal con una opción de Reporte donde se puede realizar
Preview de los datos usando el PrintPreviewDialog, configurar la página usando el
PageSetupDialog o imprimir usando el PrintDialog.
:
Objeto Propiedad Valor
Form1 Name frmReporteAlumnos2
Text Reporte de Alumnos2
DataGridvView1 Name DataGridvView1 (dgdOrden
MenuStrip1 Name mnuPrincipal
PrintDocument1 Name PrintDocument1
PrintPreviewDialog1 Name PrintPreviewDialog1
PageSetupDialog Name PageSetupDialog
PrintDialog1 Name PrintDialog1
Imports System.Data.SqlClient
Imports System.Text 'StringBuilder maneja cadenas
Public Class frmReporteAlumnos2
Inherits System.Windows.Forms.Form
Private dvw As DataView
Private cr As Integer
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\SI2011\DATOS\ALUMNOS2.mdf;Integrate
d Security=True;Connect Timeout=30;User Instance=True"
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select * From Alumnos2", con)
Dim dst As New DataSet()
dap.Fill(dst, "Alumnos2")
dvw = dst.Tables("ALumnos2").DefaultView
DataGridView1.DataSource = dvw
End Sub
Private Sub CrearDocumento(ByVal sender As System.Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim i As Integer
Dim stb As New StringBuilder()
Dim Texto As String
Dim Fuente As New Font("Courier New", 10)
Dim Brocha As Brush = Brushes.Blue
Dim X As Integer = e.MarginBounds.Left
Dim Y As Integer = e.MarginBounds.Top
Dim LP As Integer = e.MarginBounds.Height \ Fuente.GetHeight
For i = 0 To LP
If cr = dvw.Count - 1 Then Exit Sub
stb.Append(dvw(cr)(0).ToString.PadRight(15))
stb.Append(dvw(cr)(1).ToString.PadRight(30))
stb.Append(dvw(cr)(2).ToString.PadRight(15))
Texto = stb.ToString
e.Graphics.DrawString(Texto, Fuente, Brocha, X, Y)
Y = Y + Fuente.GetHeight
stb.Length = 0
cr = cr + 1
Next
e.HasMorePages = cr < dvw.Count - 1
End Sub
Private Sub MostrarPreview(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuPreview.Click
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.ShowDialog()
End Sub
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 602 -
Private Sub ConfigurarPagina(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuPageSetup.Click
PageSetupDialog1.Document = PrintDocument1
PageSetupDialog1.ShowDialog()
End Sub
Private Sub ImprimirReporte(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuPrint.Click
PrintDialog1.Document = PrintDocument1
If PrintDialog1.ShowDialog() = DialogResult.OK Then
PrintDialog1.PrinterSettings = PrintDialog1.PrinterSettings
PrintDocument1.Print()
End If
End Sub
End Class
La cantidad de líneas a imprimir de una página (LP) es obtenida dividiendo el alto del
margen entre el alto de la fuente.
Para crear una nueva página se usa la propiedad HasMorePage en True sólo cuando el
contador de registros (cr) sea menor al índice del último registro (dvw.Count-1).
El proceso de creación termina cuando no haya más registros que mostrar, es decir
cuando el contador de registros llegue a la última posición.
6 Cierre la ventana del Preview, luego si desea configure la página o realize la impresión
mediante las otras opciones del menú de Reportes.
2.1.1. Introducción
Con Crystal Reports para Visual Studio .NET, puede crear rápidamente informes complejos
de apariencia profesional. En lugar de utilizar programación, la interfaz de Crystal Report
Designer le permite crear y dar formato al informe que desee. El eficaz motor de informes
procesa los criterios de formato, agrupamiento y creación de gráficos que especifique.
Los asistentes de Crystal Report permiten crear rápidamente informes en función de las
necesidades de desarrollo:
Seleccionar la opción de diseño de informes que le interese, desde informes estándar
hasta cartas modelo, o bien cree sus propios informes partiendo de cero.
Mostrar gráficos en los que los usuarios puedan profundizar con el fin de ver datos
detallados de los informes.
Calcular resúmenes, subtotales y porcentajes de datos agrupados.
Mostrar resultados de datos de N Superiores y N Inferiores.
Dar formato al texto y rotar objetos de texto cuando se cumplan determinadas
condiciones.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 604 -
2.1.3. Ventajas de Informes
1. Para Programadores:
Selección del lenguaje y del proyecto:
Uso de los visores de informes: sin clientes (Web) y varios clientes (Windows):
Crystal Reports para Visual Studio .NET proporciona dos visores de informes con los que
puede ver informes en aplicaciones: utilice Web Forms Viewer para las aplicaciones Web
y Windows Forms Viewer para las aplicaciones de Windows.
Personalización de visores para interactuar con otros controles:
Modelo de objetos enriquecido:
2. Para Usuarios:
Visualización de Crystal Reports en el Web.
Acceso a informes perfectamente integrados:
Fácil interacción con los informes:
Exportación de informes:
o Los usuarios pueden exportar informes a formatos de Microsoft Word y Excel, así como
a formatos PDF, HTML y Crystal Reports para Visual Studio .NET.
♦ Propiedades
Database:
DataDefinition:
ExportOptions:
PrintOptions:
ReportDefinition:
ReportOptions:
Summarylnfo
Si programa una aplicación Windows, puede almacenar un informe en Windows Forms con
"Crystal Reports Windows Forms Viewer", que está disponible como control en el cuadro
de herramientas de Visual Stiudio (CrystalReportView).
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 605 -
♦ Propiedades
• TableLogOnInfos:
• ParameterFields:
• ReportSource:
1. Crear un DataSet con Tipo (Typed DataSet) que sirva de origen de datos para diseñar el
reporte (siga la indicaciones dadas en adaptador de datos en SI2011A 3VB20112008
pag 228)
.
2. Del menú "Project", seleccionar "Add New ítem..." o pulsar las teclas [Ctrl] + [Shift] + [A].
3. Del diálogo de Añadir Nuevo Elemento seleccionar "Crystal Report".
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 606 -
.
7. En la sección "Créar un nuevo documento en Crystai Report Document" seleccionar
la primera opción "Usar asistente de informes" para indicar que el reporte se
generará con el asistente de reportes.
8. En la sección "Elegir un asistente "Standard" para indicar que se desea crear un reporte
estándar (hoja A4).
9. Clic en el botón "OK" y aparecerá la ficha "Data" de la ventana del "Report Expert",
similar a la figura
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 608 -
10. Expandir el icono de "Project Data", "ADO .NET DataSets" y luego el DataSet creado.
11. Seleccionar la tabla que se desea usar en el reporte y clic en el botón "Insert Table".
Nota: Pueden usarse más de una tabla en el caso de crear reportes agrupados.
12. Clic en el botón "Next" y se mostrará la ficha "Fields" del "Report Expert", similar a la de
la figura 10.15.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 609 -
14. Clic en el botón "Next" y se mostrará la ficha "Group" del "Report Expert", similar a la de la
figura 10.16
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 610 -
15. Si desea agrupar los registros por algún campo en común que tengan éstos
seleccionar dicho campo y clic en el botón "Add"
16. Clic en el botón "Next" y si eligió Agrupar por algún campo se verá la ficha "Total" del
"Report Expert", similar a la de la figura 10.17.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 611 -
17. Seleccionar los campos que se mostrarán como cálculos en el pie de los
detalles, luego seleccionar cada uno y elegir la función que se quiere mostrar;
contar, suma, promedio, máximo, mínimo, etc.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 612 -
18. Clic al botón "Next" y si eligió Agrupar por algún campo se verá la ficha "Top N"
del "Report Expert", similar a la de la figura 10.18
21. Si desea puede crear un gráfico de datos, seleccionando el tipo de gráfico, los datos a
graficar y los títulos del gráfico.
22. Clic al botón "Next" y se verá la ficha "Select" del "Report Expert", similar a la de la
figura
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 614 -
23. Si desea puede seleccionar un campo por el cual se desea filtrar los datos, escribiendo
la condición del filtro.
24. Clic al botón "Next" y se verá la ficha "Style" del "Report Expcrt", similar a la de la figura
10.21
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 615 -
25. Escribir el título que irá en el informe y seleccionar el estilo de informe deseado y
clic en el botón "Finish" para crear el reporte
26. Inmediatamente se presentará sobre el diseñador de reportes el reporte
creado, similar a la figura 10.22
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 616 -
Nota: Los controles del cuadro de herramientas sólo permiten insertar cuadros de
texto, líneas y recuadros. Si desea insertar otro tipo de objetos use las barras de
herramientas que a continuación explicamos.
También puede usar las barras de herramientas del Crystal Report, similar a las
mostradas en las figuras 10.24 y 10.25:
Nota: para obtener barra de herramientas use el menú ver barra de herramientas y luego
Cristal Report Principal
Nota: La barra de herramientas principal permite modificar las características de los
controles diseñados en el reporte, tal como la fuente, tamaño, alineación. Además permite
cambiar características del reporte insertando campos, ordenando, et
Una vez creado el reporte con el diseñador de reportes es necesario presentarlo en una
aplicación de Windows Forms, para lo cual se usa el visor de reportes para formularios
Windows, en inglés Windows Forms Viewer.
Hay que mencionar que un mismo reporte (archivo rpt) puede ser usado en Windows o en
Web, lo único que cambia es el visor, para el caso de una aplicación Web con ASP .NET
será el Web Forms Viewer.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 618 -
En este caso veremos sólo el visor de las aplicaciones Windows, el cual se encuentra en
el "ToolBox" como control "CrystalReportViewer".
El visor de reportes proporciona los siguientes componentes, que le ayudan a ver un
informe Crystal:
1. Barra de herramientas
El visor de reportes tiene empaquetado una barra de herramientas similar a la mostrada
en la figura 10.26:
2. Árbol de Grupos
El visor de reportes también contiene un árbol de grupos ubicado en el lado derecho, éste
sólo aparece si se dan estas dos condiciones:
El informe Crystal tiene un árbol de grupos.
Ha mostrado u ocultado el icono Mostrar árbol de grupos de la barra de herramientas
del visor.
Nota: Puede expandir y contraer el árbol de grupos si hace clic en el símbolo + que aparece
junto a cada nodo del mismo.
NOTA Hacer clic con el botón secundario y elegir insertar se muestra lo siguiente
2. Crear un DataSet con Tipo (Typed DataSet) que sirva de origen de datos para diseñar el
reporte (siga la indicaciones dadas en adaptador de datos en SI2011A 3VB20112008 pag
228 para ello en el generador de consultas arrastre la tabla custumers y seleccionar sus
campos CustomerlD, CompanyName y Address.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 622 -
3. Clic derecho al objeto "sqldataadapter” y del menú contextual seleccionar "Generate
DataSet".
4. Aparecerá un diálogo, en la opción Elegir un DataSet, por defecto aparece "Nuevo",
escribir el nombre para el DataSet como datasetcustumer.
5. En la lista de tablas seleccionar la tabla Customers (dap) y clic en "OK".
6. Del menú "Project", seleccionar "Add New ítem" o pulsar las teclas [Ctrl] + [Shifl] + [A].
7. Del diálogo de Añadir Nuevo Elemento seleccionar "Crystal Report".
8. Aparecerá un diálogo de "Registro del Software", clic en el botón "Register Later" para
indicar que después se registrará.
9. Se mostrará la ventana de diálogo de Galería de Reportes (figura 10.13).
10. En la sección "Créate a New Crystal Report Document" seleccionar la primera opción
"Using the Report Expert" para indicar que el reporte se generará con el asistente de
reportes.
11. En la sección "Choose an Expert" seleccionar "Standard" para indicar que se desea crear
un reporte estándar (hoja A4).
12. Clic en el botón "OK" y aparecerá la ficha "Data" de la ventana del "Report Expert"
(figura 10.14).
13. Expandir el icono de "Project Data", "ADO .NET DataSets" y luego el DataSet "dst".
14. Seleccionar la tabla "Customers" y clic en el botón "Insert Table"
.
15. Clic en el botón "Next" y se mostrará la ficha "Fields" del "Report Expert" (figura 10.15).
16. Clic en el botón "Add All" para mostrar todos los campos en el reporte.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 623 -
17. Después de pasar los campos, modificar los títulos de las cabeceras, para el primer
campo Código, para el segundo Nombre y para el tercero Dirección.
18. Clic en el botón "Next" y se mostrará la ficha "Group" del "Report Expert" (figura 10.16).
19. Clic nuevamente en el bolón "Next" ya que nuestro reporte es simple y no tiene
agrupaciones, se mostrará la ficha "Chart" del "Report Export" (figura 10.19).
20. Clic en "Next" para indicar que no deseamos un gráfico de datos y se mostrará la ficha
"Select" del "Report Export" (figura 10.20).
21. Clic en "Next" para indicar que no deseamos filtrar y se verá la ficha "Style" del "Report
Export" (figura 10.21).
22. Escribir como título del reporte "Lista de Clientes Northwind" y seleccionar el último
estilo de la lista.
23. Clic en el botón "Finish" para crear el reporte y aparecerá el Crystal Report Designer,
por si deseamos hacer algún cambio.
24. Regresar al formulario y en la ventana explorador de soluciones dar clic en el botón " View
Code" y copie el siguiente código
Clic derecho sobre el Crystal report y en la pestaña informe principal e insertar objeto de
texto
26. . Una vez mostrado el reporte podemos hacer zoom, exportarlo o imprimirlo.
Selection
El objeto Selectior representa el área que está seleccionada. Cuando se realiza una
operación en la interfaz de usuario de Word, como poner texto en negrita, se
selecciona o resalta el texto y, a continuación, se aplica el formato. El objeto Selection
siempre está presente en un documento. Además, también puede representar varios
bloques de texto no contiguos.
Range
El objeto Range representa un área contigua de un documento, y se define mediante
una posición de carácter inicial y una posición de carácter final. Pueden utilizarse varios
objetos Range a la vez. El mismo documento puede tener definidos varios objetos
Range. Un objeto
Range tiene las siguientes características:
- Puede ser e1 punto de inserción solamente, un rango de texto o el documento
completo.
- Incluye caracteres no imprimibles como espacios, caracteres de tabulación y
marcas de párrafo.
- Puede ser el área representada por la selección actual, o puede representar otra
área diferente de la de la selección actual.
- No se guarda con un documento y sólo existe mientras se ejecuta el código.
- Guando se inserta texto al final de un rango, Word amplía éste automáticamente
para que incluya el nuevo texto.
Bookmark
El objeto Bookmark se parece al objeto Range en que representa un área contigua de
un documento, con una posición inicial y una posición final. Los marcadores se utilizan
para marcar una ubicación en un documento o como contenedores de texto en un
documento. Un objeto Bookmark puede ser el punto de inserción o el documento
completo. También se pueden definir varios marcadores en un documento. Un objeto
Bookmark tiene las siguientes características que lo distinguen del objeto Range:
- Un objeto Bookmark puede tener nombre.
- Los marcadores se guardan con el documento y, por lo tanto, no desaparecen
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 626 -
cuando cesa la ejecución del código o al cerrar el documento.
- De manera predeterminada los marcadores están ocultos, pero pueden hacerse
visibles si se establece la propiedad ShowBookmarks del objeto View en True. (El
objeto View es un miembro de los objetos Window y Pane, que existen en los
objetos Application y Document).
En general, debemos realizar los siguientes pasos para crear un documento para nuestro
informe:
1.Abrir el MS Word, del botón 'inicio", seleccionar "Programas", luego "Microsoft Office 2000"
y finalmente "Microsoft Word".
3. Empezar a crear la parte fija del documento, como títulos, párrafos, mensajes, imágenes,
tablas, etc.
4. Cuando desee crear un dato variable (campo) que se llenará desde la base de datos
ubicarse sobre la posición y clic en el primer botón de la barra de formularios para insertar
un "Campo con texto".
5. Proceda a realizar el paso anterior para todos los campos o datos variables del
documento y finalmente grabar el documento en la carpeta donde está el ejecutable de
la aplicación.
Nota: Cuando desarrollamos aplicaciones Windows usando el Visual Studio .NET, la
carpeta donde está la aplicación (el ejecutable o exe) es ¡a carpeta Bin que se
encuentra dentro de la carpeta con el Proyecto.
Una vez creado el documento hay que crear una aplicación que permita enviar los datos
hacia el documento mediante programación, a lo que se le conoce como "Automatización
COM" o "ActiveX".
Para llenar un documento de MS Word con datos de una vista desde la aplicación
debemos realizar los siguientes pasos:
1. Hacer una referencia a la librería de tipos de MS Word:
Del menú "Project" seleccionar "Add Reference".
Del diálogo seleccionar la segunda ficha "COM".
Seleccionar "Microsoft Word 9.0 Object Library".
Clic en el botón "Select" y luego clic en "OK".
Nota: Por ser un componente COM el Visual Studio .NET creará unas librerías de
interoperabilidad entre COM y .NET (Interop), las cuales se crean en el mismo directorio
donde se ejecuta la aplicación.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 627 -
2. Crear un objeto que apunte a la clase Application de Word:
Dim W As New Word.Application()
3. Abrir el documento creado como plantilla para el informe mediante el método Open de la
colección Documcnts del objeto Application:
W. Documents . Open ("Archivo. doc")
4. Escribir cada valor de un campo de la vista en el campo del documento creado mediante
la propiedad ítem de la colección Fields del objeto Document de la aplicación Word:
W.ActiveDocument.Fields.Item(l).Result.Text = dgdProducto.Item(N, 0)
Nota: En Word el índice de los campos empieza en 1 y en .NET empieza en 0.
El ejemplo trabaja con un formulario que al cargar se conecta a la base de datos Northwind
de SQL Server y llena dos tablas, una de Categorías y otra de Productos. La tabla de
Categorías se enlaza a un ComboBox mostrándose el nombre de la categoría y la tabla de
Productos sirve para crear una vista, la cual se enlaza a un DataGrid mostrándose el código,
nombre, precio y código de la categoría del producto.
Al seleccionar una Categoría del combo, la vista se filtra mostrando los productos de dicha
categoría. Finalmente, a! seleccionar un registro y dar clic al botón "Crear Documento" se
abrirá la plantilla de Word y se llenará con los datos del registro actual y se grabará en
disco.
1. Abrir el MSWord, del botón "Inicio", seleccionar "Programas", luego "Microsoft Office
2007" y finalmente "Microsoft Word".
2. Del menú "Ver"-seleccionar "Barras de herramientas" y elegir "Formularios".
3. Empezar a crear el siguiente contenido:
ACME SA
Informe de Producto
Código :
Descripción :
Categoria :
Nota: Para agregar los campos (cuadros con sombra) dar clic al primer botón de la barra de
formulario
4. Grabar el archivo como "Informe del Producto.doc" y salir de Word.
5. En el diseñador de formularios Windows, arrastrar un control Label, un ComboBox, un
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 628 -
DataGrid y un Button, luego configurar las propiedades, tal como se muestra en el siguiente
cuadro:
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Private dvw As DataView
Private Sub LlenarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 629 -
Dim con As New SqlConnection("Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\SI2011\DATOS\northwnd.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True")
Dim dap As New SqlDataAdapter("Select CategoryID,CategoryName From
Categories", con)
Dim dst As New DataSet()
dap.Fill(dst, "Categorias")
dap.SelectCommand.CommandText = "Select
ProductID,ProductName,UnitPrice,CategoryID From Products"
dap.Fill(dst, "Productos")
dvw = dst.Tables("Productos").DefaultView
With ComboBox1
.DataSource = dst.Tables("Categorias")
.DisplayMember = "CategoryName"
.ValueMember = "CategoryID"
End With
DataGrid1.DataSource = dvw
End Sub
17. vez creada la carpeta Bin con el exe, proceda a copiar el archivo de Word creado
anteriormente en dicha carpeta.
18. Seleccionar una categoría y ver como se filtran los productos de dicha categoría.
19. Seleccionar un registro y clic al botón "Crear Documento" e inmediatamente se
abrira Ms Word con la plantilla, se escribirán los datos y se guardará con un nuevo
nombre
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 631 -
• Application
El objeto Application de Excel representa la propia aplicación. Este objeto proporciona
mucha información sobre la aplicación en ejecución, las opciones que se aplican a esa
instancia y los objetos de usuario actuales que se abren en cada instancia.
• Workbook
La clase Workbok representa un solo libro dentro de la aplicación Excel. Muchos de los
miembros de la clase Application también se muestran como miembros de la clase
Workbook. En este caso, las propiedades se aplican a un libro específico, en vez de
aplicarlas al libro activo completo.
• Worksheet
Aunque la clase Worksheet proporciona muchos miembros, la mayoría de las
propiedades, de los métodos y de los eventos sor idénticos o similares a los miembros
proporcionados por las clases Application o Workbook.
Excel proporciona una colección Sheets como propiedad de un objeto Workbook, pero
no existe ninguna clase Sheet en Excel. En su lugar, cada miembro de la colección
Sheets es un objeto Worksheet o Chart.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 632 -
• Range
El objeto Range es el que utilizará con mayor frecuencia en las aplicaciones de Excel.
Antes de que pueda manipular una región de Excel, debe expresarla corno objeto Range
y trabajar con los métodos y las propiedades de este objeto. Un objeto Range
representa una celda, una fila, una columna, una selección de celdas que contienen
uno o más bloques de celdas (que pueden ser contiguas o no) o incluso un grupo de
celdas de varias hojas de cálculo.
En este tema se han descrito brevemente las clases más importantes: Application,
Workbook, Worksheet y Range. Hay muchas otras clases que podrían ser útiles, como
PivotTable y Chart. El modelo de objeto permite que el usuario realice prácticamente cualquier
tarea automatizada necesaria.
En nuestro caso, para crear gráficos de datos usaremos la clase Application y las
colecciones WorkBooks y Charts, tal como explicamos en la siguiente sección.
Para crear un gráfico en MS Excel con datos de una vista desde la aplicación debemos realizar
los siguientes pasos:
1. Hacer una referencia a la librería de tipos de MS Excel:
• Del menú 'Project" seleccionar "Add Reference".
• Del diálogo seleccionar la segunda ficha "COM".
• Seleccionar "Microsoft Excel12 Object Library".
• Clic en el botón "Select" y luego clic en "OK".
Demo 73 crear un gráfico de barras en MS Excel con datos obtenidos desde una
aplicación Windows en .NET.
El ejemplo trabaja con un formulario que al cargar se conecta a la base de datos Northwind
de SQL Server y llena dos tablas, una de Categorías y otra de Productos. La tabla de
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 633 -
Categorías se enlaza a un ComboBox mostrándose el nombre de la categoría y la tabla de
Productos sirve para crear una vista, la cual se enlaza a un DataGrid mostrándose el código,
nombre, precio y código de la categoría del producto.
Al seleccionar una Categoría del combo la vista se filtra mostrando los productos de dicha
categoría. Finalmente, al seleccionar un registro y dar clic al botón "Crear Gráfico" se abrirá el
Excel y se enviarán los datos de la vista filtrada por categoría, con los cuales se construirá un
gráfico de barras el cual también se guarda en disco como archivo gif.
Imports System.Data.SqlClient
Public Class Form1
Private dvw As DataView
Private Sub LlenarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection("Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\SI2011\DATOS\northwnd.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True")
Dim dap As New SqlDataAdapter("Select CategoryID,CategoryName From
Categories", con)
Dim dst As New DataSet()
dap.Fill(dst, "Categorias")
dap.SelectCommand.CommandText = "Select
ProductID,ProductName,UnitPrice,CategoryID From Products"
dap.Fill(dst, "Productos")
dvw = dst.Tables("Productos").DefaultView
With ComboBox1
.DataSource = dst.Tables("Categorias")
.DisplayMember = "CategoryName"
.ValueMember = "CategoryID"
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 634 -
End With
DataGrid1.DataSource = dvw
End Sub
Private Sub FilltrarProductos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Try
dvw.RowFilter = "CategoryID=" & ComboBox1.SelectedValue
Catch ex As Exception
End Try
End Sub
notas:
5 Seleccionar una categoría y ver como se filtran los productos de dicha categoría.
7 Revisar que en la carpeta Bin se ha creado un archivo gif con un gráfico de productos de
dicha categoría.
8 Cerrar el Excel y si desea puede guardar el archivo.