Print Page | Close Window

Export crystal report to word document?

Printed From: Crystal Reports Book
Category: Crystal Reports for Visual Studio 2005 and Newer
Forum Name: Writing Code
Forum Discription: .NET programming API, report integration
URL: http://www.crystalreportsbook.com/forum/forum_posts.asp?TID=3642
Printed Date: 19 May 2024 at 11:39pm


Topic: Export crystal report to word document?
Posted By: Puneri
Subject: Export crystal report to word document?
Date Posted: 09 Jul 2008 at 12:25am
Hello

I want to save crystal report output as word document on server.
I've written following code. But I'm getting error at highlighted line.
CrEmReport is my crystalreportviewer object.

Me.CrEmReport.ParameterFieldInfo.Clear()
Me.CrEmReport.ReportSource =Server.MapPath("EmCallupReport.rpt")
Dim ParamFields As ParameterFields = Me.CrEmReport.ParameterFieldInfo
Dim emTicketId As New ParameterField
emTicketId.Name = "VTICKETID"
Dim emTicketId_Value As New ParameterDiscreteValue
emTicketId_Value.Value = objTicket.ticketId
emTicketId.CurrentValues.Add(emTicketId_Value)
ParamFields.Add(emTicketId)


For Each cnInfo As TableLogOnInfo In Me.CrEmReport.LogOnInfo

cnInfo.ConnectionInfo = ConnInfo
Next
Dim objReportDoc As New ReportDocument
objReportDoc = CrEmReport.ReportSource
    objReportDoc.ExportToDisk(ExportFormatType.PortableDocFormat, "\\app_data\\uploads\\Reports\\Emergency\\Emergency_" & objTicket.ticketId)


I'm getting error at red line as,
Unable to cast object of type 'CrystalDecisions.ReportSource.NonHTTPCachedReportSource' to type 'CrystalDecisions.CrystalReports.Engine.ReportDocument'

From error I can understand that i'm assigning reportdocument object some other type of object. But to use export method I need reportdocument object pointing to my report. How to achieve this???
Need help urgently.....  Cry



Replies:
Posted By: hilfy
Date Posted: 14 Jul 2008 at 1:29pm
What type of object is CrEmReport?  Is it a CrystalReportsViewer control?
 
If all you're trying to do is export the report without showing it, then you would be better off loading the report directly into a ReportDocument object using the .Load method.  You then set the parameters and the logins using the methods and properties of the ReportDocument.  At that point, you can call ExportToDisk on the ReportDocument that you already have.
 
-Dell


-------------
Proviti, Data & Analytics Practice
http://www.protiviti.com/US-en/data-management-advanced-analytics - www.protiviti.com/US-en/data-management-advanced-analytics


Posted By: Puneri
Date Posted: 14 Jul 2008 at 11:47pm
CrEmReport is my crystalreportviewer object.

I want to display report to user. But User should not be able to export to local machine. Instead I want to save report to disk.


Posted By: Puneri
Date Posted: 15 Jul 2008 at 2:45am
Dim objReportDoc As New ReportDocument
objReportDoc.Load("EmCallupReport.rpt",OpenReportMethod.OpenReportByDefault)


At runtime i'm getting error as Load report failed. System could find specified file.


This aspx page and .rpt files lie in same folder. How to load .rpt?
                   


Posted By: Puneri
Date Posted: 21 Jul 2008 at 6:50am
Hi
I've modified above code as follows.
Dim objReportDoc As New ReportDocument
                objReportDoc.Load(Server.MapPath("EmCallupReport.rpt"), OpenReportMethod.OpenReportByDefault)
                objReportDoc.SetParameterValue("VTICKETID", objEmTicket.ticketId)
                objReportDoc.SetDatabaseLogon("HDLOCAL", "HDLOCAL", "HDLOCAL", "")
                objReportDoc.ExportToDisk(ExportFormatType.WordForWindows, Server.MapPath("\\app_data\\uploads\\Reports\\Emergency"))

I'm getting error at last line as,

Source        : System.Web
Method        : MapPathActual
Error        : Failed to map the path '/app_data/uploads/Reports/Emergency'.
Stack Trace    : at System.Web.Hosting.HostingEnvironment.MapPathActual(VirtualPath virtualPath, Boolean permitNull)
   at System.Web.VirtualPath.MapPathInternal()
   at System.Web.HttpRequest.MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, Boolean allowCrossAppMapping)
   at System.Web.HttpServerUtility.MapPath(String path)
   at frmEmergency.btnSubmit_Click(Object sender, EventArgs e) in C:\Inetpub\wwwroot\Helpdesk_2007_02\frmCreateEmTicket.aspx.vb:line 183
How to specify location?



Posted By: hilfy
Date Posted: 21 Jul 2008 at 7:26am
As I said in response to your PM (I'm going to repost here in case anyone else needs the answer), this is probably an access rights issue. 
 
ASP.NET application usually run under a user ID that is local to the machine where they're running.  This user ID does NOT have access to your network and can't be given that access.  So, in order to access network resources you need to have a network User ID for your ASP.NET applications to run under.  There is a way of configuring IIS to use this new ID for your applications, but I'm not exactly sure how to set that up because our Network folks handle that configuration.
 
-Dell


-------------
Proviti, Data & Analytics Practice
http://www.protiviti.com/US-en/data-management-advanced-analytics - www.protiviti.com/US-en/data-management-advanced-analytics


Posted By: Ishfaq
Date Posted: 21 Jul 2008 at 11:53pm

Hi puneri... use below code.once you get the report displayed,then you can use the tool bar of the Report viewer to export to any other format.

 
 

 

    Dim crtableLogoninfos As New TableLogOnInfos

    Dim crtableLogoninfo As New TableLogOnInfo

    Dim crConnectionInfo As New ConnectionInfo

    ''   Dim crdatabase As Database

    Dim CrTables As Tables

    Dim CrTable As Table

    Dim crReportDocument As New ReportDocument

 

   

        crReportDocument.Load("Put report path here")

        crConnectionInfo.ServerName = "Server Name here"

        crConnectionInfo.DatabaseName = "Database Name Here"

        crConnectionInfo.UserID = "user id"

        crConnectionInfo.Password = "password"

 

        CrTables = crReportDocument.Database.Tables

 

        'Set the connection info to each table present in the report

        For Each CrTable In CrTables

            crtableLogoninfo = CrTable.LogOnInfo

            crtableLogoninfo.ConnectionInfo = crConnectionInfo

            CrTable.ApplyLogOnInfo(crtableLogoninfo)

        Next

 

'Sub Report Log on*****************************'

        Dim li_Sectionindex As Integer

        Dim li_ObjCtr As Integer

        Dim li_TableCtr As Integer

        Dim l_SubReportObject As CrystalDecisions.CrystalReports.Engine.SubreportObject

        Dim l_SubRepDoc As New CrystalDecisions.CrystalReports.Engine.ReportDocument

 

        For li_Sectionindex = 0 To crReportDocument.ReportDefinition.Sections.Count - 1

            For li_ObjCtr = 0 To crReportDocument.ReportDefinition.Sections(li_Sectionindex).ReportObjects.Count - 1

                With crReportDocument.ReportDefinition.Sections(li_Sectionindex)

                    If .ReportObjects(li_ObjCtr).Kind = CrystalDecisions.Shared.ReportObjectKind.SubreportObject Then

                        l_SubReportObject = CType(.ReportObjects(li_ObjCtr), CrystalDecisions.CrystalReports.Engine.SubreportObject)

                        l_SubRepDoc = l_SubReportObject.OpenSubreport(l_SubReportObject.SubreportName)

 

                        For li_TableCtr = 0 To l_SubRepDoc.Database.Tables.Count - 1

                            l_SubRepDoc.Database.Tables(li_TableCtr).ApplyLogOnInfo(crtableLogoninfo)

                        Next

 

 

                    End If

                End With

            Next

        Next

 

        '****************End Sub Report log on********************************'

 

 

 

 

 

        crviewer.ReportSource = crReportDocument

 
 
 



Print Page | Close Window