Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Create an Excel file (xls)
Message
From
24/03/2008 10:16:17
 
 
To
24/03/2008 09:27:40
General information
Forum:
ASP.NET
Category:
Coding, syntax and commands
Environment versions
Environment:
C# 2.0
OS:
Windows XP SP2
Network:
Windows XP
Database:
MS SQL Server
Miscellaneous
Thread ID:
01304564
Message ID:
01304876
Views:
21
>I have seen an 'export' to excel from asp.net. What stroke me was that there were no columnheaders, nor any formatting. So that answers my question. In time, when I have really gotten around to .net, I'll do something (or at least hope to do), that gives me the excel output I have in my foxpro grid's class. (headers, numberformat with 0 in red, horizontal alignment, and columns.Autofit)

This is what I have. You need to adjust the entry point but everything is in there. This one allows you to adjust for given format and applying logic on your dataset.
Imports System.IO
Imports System.Xml
Imports System.Xml.Xsl
Imports System.Text

Namespace Framework

    Public Class Export

        ' For debugging purpose, this will have the Xsl file to remain on disk
        Public lRemoveTemporaryFile As Boolean = True

        Public oApp As Framework.App
        Private oProcess As Framework.LXProcess

        ' This is when we access the data provider in desktop and Web service mode
        Sub New(ByVal toApplication As Framework.App)
            oApp = toApplication
        End Sub

        ' This is when we access the data provider in a Web mode
        Public Sub New(ByVal toProcess As Framework.LXProcess)
            oProcess = toProcess
            oApp = oProcess.oApp
        End Sub

        ' Export a dataset into an Excel spreadsheet
        ' expO1 DataSet
        ' expC1 Full path of the file to save
        Public Function ExportToExcel(ByVal toDataSet As DataSet, ByVal tcFile As String) As Boolean
            Dim loDataXML As Framework.DataXML
            Dim lcFile As String = oApp.GenerateFileName()
            Dim loXml As Framework.XML
            Dim loXslCompiledTransform As Xsl.XslCompiledTransform = New Xsl.XslCompiledTransform

            ' Get the proper definition as per the current scope
            If oProcess Is Nothing Then
                loXml = New Framework.XML(oApp)
                loDataXML = New Framework.DataXML(oApp)
            Else
                loXml = New Framework.XML(oProcess)
                loDataXML = New Framework.DataXML(oProcess)
            End If

            ' Load the Xml
            If Not loXml.LoadXml(loDataXML.DataSetToXml(toDataSet)) Then
                Return False
            End If

            ' Normalize the Xml
            If Not loXml.Normalize() Then
                Return False
            End If

            ' Save in a Xml file
            If Not oApp.CreateFile(loXml.AddHeaderForFrenchCharacter() + loXml.cXml, _
             oApp.cHttpFat + "Temp\" + lcFile + ".xml") Then
                Return False
            End If

            ' Save the Xsl file
            If Not oApp.CreateFile(GetXsl(), oApp.cHttpFat + "Temp\" + lcFile + ".xsl") Then
                Return False
            End If

            ' Load the Xsl in memory
            loXslCompiledTransform.Load(oApp.cHttpFat + "Temp\" + lcFile + ".xsl")

            ' Do the transformation
            Try
                loXslCompiledTransform.Transform(oApp.cHttpFat + "Temp\" + lcFile + ".xml", tcFile)
            Catch loError As Exception

                ' Get the proper definition as per the current scope
                If oProcess Is Nothing Then
                    oApp.ErrorSetup(loError)
                Else
                    oProcess.ErrorSetup(loError)
                End If

                Return False
            End Try

            ' If we remove the temporary file
            If lRemoveTemporaryFile Then

                ' Get the proper definition as per the current scope
                If oProcess Is Nothing Then
                    oApp.DeleteFile(oApp.cHttpFat + "Temp\" + lcFile + ".xml")
                    oApp.DeleteFile(oApp.cHttpFat + "Temp\" + lcFile + ".xsl")
                Else
                    oProcess.DeleteFile(oApp.cHttpFat + "Temp\" + lcFile + ".xml")
                    oProcess.DeleteFile(oApp.cHttpFat + "Temp\" + lcFile + ".xsl")
                End If

            End If

            Return True
        End Function

        ' Generate a generic Xsl string based on the dataset
        ' This one is generated in a way that the process of recognizing the field types is done
        ' with the Xsl itself. For a more complex algorithm, you may use GetXsl()
        Private Function GetXsl() As String
            Dim loStringBuilder As StringBuilder = New StringBuilder()

            loStringBuilder.Append("<xsl:stylesheet version=""1.0"" " + oApp.cCR)
            loStringBuilder.Append("xmlns=""urn:schemas-microsoft-com:office:spreadsheet"" " + oApp.cCR)
            loStringBuilder.Append("xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" " + oApp.cCR)
            loStringBuilder.Append("xmlns:msxsl=""urn:schemas-microsoft-com:xslt"" " + oApp.cCR)
            loStringBuilder.Append("xmlns:user=""urn:my-scripts"" " + oApp.cCR)
            loStringBuilder.Append("xmlns:o=""urn:schemas-microsoft-com:office:office"" " + oApp.cCR)
            loStringBuilder.Append("xmlns:x=""urn:schemas-microsoft-com:office:excel"" " + oApp.cCR)
            loStringBuilder.Append("xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet"" " + oApp.cCR)
            loStringBuilder.Append("xmlns:xs=""http://www.w3.org/2001/XMLSchema"">" + oApp.cCR)

            ' Workbook
            loStringBuilder.Append("<xsl:template match=""/"">" + oApp.cCR)
            loStringBuilder.Append("<Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet"" " + oApp.cCR)
            loStringBuilder.Append("xmlns:o=""urn:schemas-microsoft-com:office:office"" " + oApp.cCR)
            loStringBuilder.Append("xmlns:x=""urn:schemas-microsoft-com:office:excel"" " + oApp.cCR)
            loStringBuilder.Append("xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet"" " + oApp.cCR)
            loStringBuilder.Append("xmlns:html=""http://www.w3.org/TR/REC-html40"">" + oApp.cCR)
            loStringBuilder.Append("<xsl:apply-templates/>" + oApp.cCR)
            loStringBuilder.Append("</Workbook>" + oApp.cCR)
            loStringBuilder.Append("</xsl:template>" + oApp.cCR)

            ' Worksheet
            loStringBuilder.Append("<xsl:template match=""/*"">" + oApp.cCR)
            loStringBuilder.Append("<Worksheet>" + oApp.cCR)
            loStringBuilder.Append("<xsl:attribute name=""ss:Name"">" + oApp.cCR)
            loStringBuilder.Append("<xsl:value-of select=""local-name(/*/*)""/>" + oApp.cCR)
            loStringBuilder.Append("</xsl:attribute>" + oApp.cCR)
            loStringBuilder.Append("<Table x:FullColumns=""1"" x:FullRows=""1"">" + oApp.cCR)
            loStringBuilder.Append("<Row>" + oApp.cCR)
            loStringBuilder.Append("<xsl:for-each select=""/NewDataSet/Temp[position() = 1]/*"">" + oApp.cCR)
            loStringBuilder.Append("<Cell>" + oApp.cCR)
            loStringBuilder.Append("<Data ss:Type=""String"">" + oApp.cCR)
            loStringBuilder.Append("<xsl:value-of select=""local-name(current())""/>" + oApp.cCR)
            loStringBuilder.Append("</Data>" + oApp.cCR)
            loStringBuilder.Append("</Cell>" + oApp.cCR)
            loStringBuilder.Append("</xsl:for-each>" + oApp.cCR)
            loStringBuilder.Append("</Row>" + oApp.cCR)
            loStringBuilder.Append("<xsl:for-each select=""/NewDataSet/Temp"">" + oApp.cCR)
            loStringBuilder.Append("<xsl:call-template name=""ProcessDataRows"">" + oApp.cCR)
            loStringBuilder.Append("<xsl:with-param name=""tempElement"" select=""current()""/>" + oApp.cCR)
            loStringBuilder.Append("</xsl:call-template>" + oApp.cCR)
            loStringBuilder.Append("</xsl:for-each>" + oApp.cCR)
            loStringBuilder.Append("</Table>" + oApp.cCR)
            loStringBuilder.Append("</Worksheet>" + oApp.cCR)
            loStringBuilder.Append("</xsl:template>" + oApp.cCR)

            ' For each row
            loStringBuilder.Append("<xsl:template name=""ProcessDataRows"">" + oApp.cCR)
            loStringBuilder.Append("<xsl:param name=""tempElement"" />" + oApp.cCR)
            loStringBuilder.Append("<Row>" + oApp.cCR)
            loStringBuilder.Append("<xsl:for-each select=""$tempElement/*"">" + oApp.cCR)
            loStringBuilder.Append("<Cell>" + oApp.cCR)
            loStringBuilder.Append("<xsl:choose>" + oApp.cCR)
            loStringBuilder.Append("<xsl:when test=""//xs:element[ @name = local-name(current()) ]/@type = 'xs:decimal'"">" + oApp.cCR)
            loStringBuilder.Append("<Data ss:Type=""Number"">" + oApp.cCR)
            loStringBuilder.Append("<xsl:value-of select="".""/>" + oApp.cCR)
            loStringBuilder.Append("</Data>" + oApp.cCR)
            loStringBuilder.Append("</xsl:when>" + oApp.cCR)

            'String
            loStringBuilder.Append("<xsl:when test=""//xs:element[ @name = local-name(current()) ]/@type = 'xs:string'"">" + oApp.cCR)
            loStringBuilder.Append("<Data ss:Type=""String"">" + oApp.cCR)
            loStringBuilder.Append("<xsl:value-of select="".""/>" + oApp.cCR)
            loStringBuilder.Append("</Data>" + oApp.cCR)
            loStringBuilder.Append("</xsl:when>" + oApp.cCR)

            ' Datetime
            loStringBuilder.Append("<xsl:when test=""//xs:element[ @name = local-name(current()) ]/@type = 'xs:dateTime'"">" + oApp.cCR)
            loStringBuilder.Append("<xsl:choose>" + oApp.cCR)
            loStringBuilder.Append("<xsl:when test="". = '1899-12-30T00:00:00-04:00'"">" + oApp.cCR)
            loStringBuilder.Append("<Data ss:Type=""String"">" + oApp.cCR)
            loStringBuilder.Append("</Data>" + oApp.cCR)
            loStringBuilder.Append("</xsl:when>" + oApp.cCR)
            loStringBuilder.Append("<xsl:otherwise>" + oApp.cCR)
            loStringBuilder.Append("<Data ss:Type=""String"">" + oApp.cCR)
            loStringBuilder.Append("<xsl:value-of select="".""/>" + oApp.cCR)
            loStringBuilder.Append("</Data>" + oApp.cCR)
            loStringBuilder.Append("</xsl:otherwise>" + oApp.cCR)
            loStringBuilder.Append("</xsl:choose>" + oApp.cCR)
            loStringBuilder.Append("</xsl:when>" + oApp.cCR)

            ' Integer
            loStringBuilder.Append("<xsl:when test=""//xs:element[ @name = local-name(current()) ]/@type = 'xs:int'"">" + oApp.cCR)
            loStringBuilder.Append("<Data ss:Type=""Number"">" + oApp.cCR)
            loStringBuilder.Append("<xsl:value-of select="".""/>" + oApp.cCR)
            loStringBuilder.Append("</Data>" + oApp.cCR)
            loStringBuilder.Append("</xsl:when>" + oApp.cCR)

            ' Boolean
            loStringBuilder.Append("<xsl:when test=""//xs:element[ @name = local-name(current()) ]/@type = 'xs:boolean'"">" + oApp.cCR)
            loStringBuilder.Append("<Data ss:Type=""String"">" + oApp.cCR)
            loStringBuilder.Append("<xsl:value-of select="".""/>" + oApp.cCR)
            loStringBuilder.Append("</Data>" + oApp.cCR)
            loStringBuilder.Append("</xsl:when>" + oApp.cCR)

            loStringBuilder.Append("<xsl:otherwise>" + oApp.cCR)
            loStringBuilder.Append("<Data ss:Type=""String"">" + oApp.cCR)
            loStringBuilder.Append("<xsl:value-of select="".""/>" + oApp.cCR)
            loStringBuilder.Append("</Data>" + oApp.cCR)
            loStringBuilder.Append("</xsl:otherwise>" + oApp.cCR)

            loStringBuilder.Append("</xsl:choose>" + oApp.cCR)
            loStringBuilder.Append("</Cell>" + oApp.cCR)
            loStringBuilder.Append("</xsl:for-each>" + oApp.cCR)
            loStringBuilder.Append("</Row>" + oApp.cCR)
            loStringBuilder.Append("</xsl:template>" + oApp.cCR)

            loStringBuilder.Append("</xsl:stylesheet>" + oApp.cCR)

            Return loStringBuilder.ToString()
        End Function

    End Class

End Namespace
Michel Fournier
Level Extreme Inc.
Designer, architect, owner of the Level Extreme Platform
Subscribe to the site at https://www.levelextreme.com/Home/DataEntry?Activator=55&NoStore=303
Subscription benefits https://www.levelextreme.com/Home/ViewPage?Activator=7&ID=52
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform