Export HTML content into Docx

1 posts, 0 answers
  1. Attila Antal
    Attila Antal avatar
    55 posts

    Posted 27 Dec 2017 Link to this post


    Telerik Product and Version


    Supported Browsers and Platforms

    All browsers supported by Telerik UI for ASP .NET AJAX

    Components/Widgets used (JS frameworks, etc.)



    There are cases when the data bound to RadGrid contains html tags, which is rendered as expected on the page.

    Example datatable with data containing Html tags.

    Data renderd on the page

    There would be no issues if the exporting was done into Html based Word document (.doc). All it takes is to define Html for the export format (Export Settings -> Word Format -> Html.)
        <Word Format="Html" />


     In our case, however, XML Based Word Document (.docx) is the required format. Changing the Word Format to Docx, in the exported file, Html tags will be returned as string.


    Export the grid using HTML for Word Format, convert the Html to Docx using our Document Processing Libraries and then return the result in the Page response for download.

    Set the Word format to Html

        <Word Format="Html" />

    Covnert the output to Docx using the GridExporting event of RadGrid

    Protected Sub RadGrid1_GridExporting(sender As Object, e As GridExportingArgs)
        If (e.ExportType = ExportType.Word) Then
            '' Create a RadFlowDocument object
            Dim document As RadFlowDocument = New RadFlowDocument()
            '' Importing the HTML output from the grid into the htmlProvider
            Dim htmlProvider As HtmlFormatProvider = New HtmlFormatProvider()
            document = htmlProvider.Import(e.ExportOutput)
            Dim data As Byte() = Nothing
            '' Changing the page orientation of all sections in a document
            For Each section As Section In document.EnumerateChildrenOfType(Of Section)()
            'Dim iProvider As IFormatProvider(Of RadFlowDocument) = docxProvider
            '' export the final document (docx) into the MemoryStream
            Using ms As New MemoryStream()
                Dim docxProvider As DocxFormatProvider = New DocxFormatProvider()
                docxProvider.Export(document, ms)
                data = ms.ToArray() '' get the byte data of the document
            End Using
            '' send the data in the response for download
            Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
            Response.AppendHeader("Content-Disposition", "attachment; filename=" & RadGrid1.ExportSettings.FileName & ".docx")
        End If
    End Sub


    One more thing to adjust in here. Note, the cell borders are not present in the picture above. To overcome that, apply the desired style to the cells inside the PreRender event of RadGrid.
    Protected Sub RadGrid1_PreRender(sender As Object, e As EventArgs)
        If RadGrid1.IsExporting Then
            '' Setting borders for the Header Cells
            For Each headerCell As TableHeaderCell In RadGrid1.MasterTableView.GetItems(GridItemType.Header)(0).Cells
                headerCell.Style("border") = "1px solid"
            '' Setting borders for the data cells
            For Each dataItem As GridDataItem In RadGrid1.Items
                For Each cell As GridTableCell In dataItem.Cells
                    cell.Style("border") = "1px solid"
        End If
    End Sub

    Final results: GridExport.docx
Back to Top