none
Exportar a excel utilizando reporting services con codigo visual basic RRS feed

  • Pregunta

  • Hola

    Alguien sabe como se puede exportar a excel por medio del web service de Reporting services, estoy utilizando visual basic 2010

    Es decir, tengo un reporte pero lo que no quiero es que el usuario tenga que visualizar el reporte y despues le de clic en exportar > excel sino, directamente que lo exporte

    Si alguien tiene un ejemplo en Visual Basic para esto y no en C#

    Gracias


    Gracias Ing. Salomon Bagdadi

    martes, 14 de agosto de 2012 23:48

Respuestas

  • Aquí tienes el código en C# que exporta a Excel. Recuerda que antes tendrás que añadir en el proyecto al .asmx del  ReportExecutionService.

                ServicioInformes.ReportExecutionService rs = new ServicioInformes.ReportExecutionService(); //Poner aquí el namespace correcto que corresponda con la referencia que se añadió al proyecto
                rs.Credentials = System.Net.CredentialCache.DefaultCredentials; //Cambiar si procede

                byte[] result = null;
                string reportPath = "/Carpeta/NombreDelInforme";
                string format = "EXCEL";
                string historyID = null;
                string devInfo = @"<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>";

                ParameterValue[] parameters = new ParameterValue[1];
                parameters[0] = new ParameterValue();
                parameters[0].Name = "NombreDelParametro";
                parameters[0].Value = valorDelParametro;
                //Añadir similarmente otros parámetros que tenga el informe
               
                string encoding;
                string mimeType;
                string extension;
                Warning[] warnings = null;
                string[] streamIDs = null;

                ExecutionInfo execInfo = new ExecutionInfo();
                ExecutionHeader execHeader = new ExecutionHeader();

                rs.ExecutionHeaderValue = execHeader;

                execInfo = rs.LoadReport(reportPath, historyID);

                rs.SetExecutionParameters(parameters, "en-us");
                String SessionId = rs.ExecutionHeaderValue.ExecutionID;

                try
                {
                    result = rs.Render(format, devInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);

                    execInfo = rs.GetExecutionInfo();

                    //La variable resul trae el contenido en binario del .xls exportado
                }
                catch (System.Web.Services.Protocols.SoapException)
                {
                    //mensaje = "Se ha producido un error al producir el informe: " + HttpContext.Current.Server.HtmlEncode(ex.Detail.OuterXml);
                }

     

    • Marcado como respuesta SaloBG lunes, 20 de agosto de 2012 15:16
    viernes, 17 de agosto de 2012 8:31
    Moderador

Todas las respuestas

  • ¿Qué más te da que el ejemplo esté en C# en lugar de VB? No tienes más que pasarlo por uno de los muchos traductores que convierten de un lenguaje a otro, por ejemplo este:

    http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Si quieres, yo mismo tengo algún ejemplo que te puedo pasar... pero está en C#, tendrás que copiarlo y pegarlo tú mismo en la pantalla del traductor a VB.

    jueves, 16 de agosto de 2012 10:53
    Moderador
  • Gracias Alberto por la respuesta

    Si, me podrias pasar el ejemplo??

    Gracias


    Gracias Ing. Salomon Bagdadi

    jueves, 16 de agosto de 2012 18:01
  • Aquí tienes el código en C# que exporta a Excel. Recuerda que antes tendrás que añadir en el proyecto al .asmx del  ReportExecutionService.

                ServicioInformes.ReportExecutionService rs = new ServicioInformes.ReportExecutionService(); //Poner aquí el namespace correcto que corresponda con la referencia que se añadió al proyecto
                rs.Credentials = System.Net.CredentialCache.DefaultCredentials; //Cambiar si procede

                byte[] result = null;
                string reportPath = "/Carpeta/NombreDelInforme";
                string format = "EXCEL";
                string historyID = null;
                string devInfo = @"<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>";

                ParameterValue[] parameters = new ParameterValue[1];
                parameters[0] = new ParameterValue();
                parameters[0].Name = "NombreDelParametro";
                parameters[0].Value = valorDelParametro;
                //Añadir similarmente otros parámetros que tenga el informe
               
                string encoding;
                string mimeType;
                string extension;
                Warning[] warnings = null;
                string[] streamIDs = null;

                ExecutionInfo execInfo = new ExecutionInfo();
                ExecutionHeader execHeader = new ExecutionHeader();

                rs.ExecutionHeaderValue = execHeader;

                execInfo = rs.LoadReport(reportPath, historyID);

                rs.SetExecutionParameters(parameters, "en-us");
                String SessionId = rs.ExecutionHeaderValue.ExecutionID;

                try
                {
                    result = rs.Render(format, devInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);

                    execInfo = rs.GetExecutionInfo();

                    //La variable resul trae el contenido en binario del .xls exportado
                }
                catch (System.Web.Services.Protocols.SoapException)
                {
                    //mensaje = "Se ha producido un error al producir el informe: " + HttpContext.Current.Server.HtmlEncode(ex.Detail.OuterXml);
                }

     

    • Marcado como respuesta SaloBG lunes, 20 de agosto de 2012 15:16
    viernes, 17 de agosto de 2012 8:31
    Moderador
  • Gracias Alberto

    Sin embargo tengo errores que me marca, primero dejame comentarte que tueve que hacer algunos cambios, en general este es mi codigo:

     Dim rs As New HolaMundoWebService.ReportingServicesWS.ReportingService2010SoapClient
     Dim result As Byte() = Nothing
            'Dim reportPath As String = "/Carpeta/NombreDelInforme"
            Dim reportPath As String = "/IPBellBI/Test"
            Dim format As String = "EXCEL"
            Dim historyID As String = Nothing
            Dim devInfo As String = "<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>"
    
            ''Parametros
            'Dim parameters(0 To 1 - 1) As ReportingServicesWS.ParameterValue
            'parameters(0) = New ReportingServicesWS.ParameterValue()
            'parameters(0).Name = "NombreDelParametro"
            'parameters(0).Value = valorDelParametro
            ''Añadir similarmente otros parámetros que tenga el informe
    
            Dim encoding As String
            Dim mimeType As String
            Dim extension As String
            Dim warnings As ReportingServicesWS.Warning() = Nothing
    
            Dim streamIDs As String() = Nothing
            'Dim execInfo As New ExecutionInfo()
            Dim execInfo As New HolaMundoWebService.ReportingServicesWS.ServerInfoHeader
            Dim execHeader As New ExecutionHeader()
            rs.ExecutionHeaderValue = execHeader
    
    
            execInfo = rs.LoadReport(reportPath, historyID)
    
    
    
            'rs.SetExecutionParameters(parameters, "en-us")
            Dim SessionId As String = rs.ExecutionHeaderValue.ExecutionID

    Me manda error en:

     Dim execHeader As New ExecutionHeader()
            rs.ExecutionHeaderValue = execHeader
            execInfo = rs.LoadReport(reportPath, historyID)
    
            'rs.SetExecutionParameters(parameters, "en-us")
            Dim SessionId As String = rs.ExecutionHeaderValue.ExecutionID

    me parece que el executionheader es para versiones 2005, no 2008

    Gracias por la aydua


    Gracias Ing. Salomon Bagdadi

    viernes, 17 de agosto de 2012 17:36
  • me parece que el executionheader es para versiones 2005, no 2008

    No, la versión 2008 trae un servicio .asmx que se llama ReportExecution2005.asmx (nótese que acaba en 2005 aunque el SQL Server sea de la versión 2008). A este archivo es al que tienes que añadir la Referencia Web. Asegúrate de que es el ReportExecution2005; no lo confundas con el otro .asmx que trae SSRS (creo que se llama ReportService2005), que no trae las mismas funciones.

    Si la referencia la pones al archivo correcto, sí que trae el ExecutionHeader. Por cierto, veo que has "descomentado" el execInfo = New ExecutionInfo() y has puesto en su lugar otra cosa. Esto no funcionará, debes declararlo como ExecutionInfo. Esta clase también viene en el ReportExecution2005. Acuérdate de poner el correspondiente "Imports" al principio del fuente para que te encuentre estas clases que te faltan. Ah, y el SetExecutionParamenters que has puesto como comentario creo recordar que también era crítico y que la lamada al SSRS falla si no lo pones.

    sábado, 18 de agosto de 2012 6:28
    Moderador
  • Gracias Alberto

    Estas en lo correcto estaba mal la referencia, ya se soluciono,

    te agradeceria de todas formas si tienes algun ejemplo para el ReportExecution2008.asmx


    Gracias Ing. Salomon Bagdadi

    lunes, 20 de agosto de 2012 15:16