Поддерживать форматирование текста во время загрузки файла Excel - PullRequest
0 голосов
/ 09 октября 2018

У меня есть столбец «Product_Decription» в базе данных MySQL, и его тип данных - Text.Когда пользователь обновляет столбец через пользовательский интерфейс, может существовать разрыв строки.Когда моя функция «Загрузить все описание продукта» экспортирует данные в файл Excel, разрыв строки исчезает.Как я могу сохранить форматирование текста, которое похоже на базу данных?

Функция загрузки выглядит следующим образом:

Dim forDownloadGV As New GridView()
    forDownloadGV.DataSource = ""
    forDownloadGV.DataBind()

    Dim myConnection As MySqlConnection
    Dim myDataAdapter As MySqlDataAdapter
    Dim myDataset As DataSet

    Dim strSQL As String

    myConnection = New MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("for_Read").ConnectionString)

    myConnection.Close()
    myConnection.Open()

    strSQL = "SELECT REPLACE(REPLACE(`Product_Desription`, char(13), '<br/>'), CHAR(10), '<br/>') as 'Description'from `Products`"
    myDataAdapter = New MySqlDataAdapter(strSQL, myConnection)

    myDataset = New DataSet()

    myDataAdapter.Fill(myDataset, "Products")

    forDownloadGV.DataSource = myDataset
    forDownloadGV.DataBind()

    Response.Clear()
    Response.Buffer = True
    Response.AddHeader("content-disposition", "attachment;filename=Products.xls")
    Response.Charset = ""
    Response.ContentType = "application/vnd.ms-excel"
    Dim sw As New StringWriter()
    Dim hw As New HtmlTextWriter(sw)

    For i As Integer = 0 To forDownloadGV.Rows.Count - 1
        'Apply text style to each Row
        forDownloadGV.Rows(i).Attributes.Add("class", "textmode")
    Next
    forDownloadGV.RenderControl(hw)

    'style to format numbers to string
    Dim style As String = "<style> .textmode{mso-number-format: \@;}</style>"
    Response.Write(style)
    Response.Output.Write(sw.ToString())
    Response.Flush()
    Response.End()

Я пытался заменить на, но файл Excel при загрузке по-прежнему не поддерживает исходныйформатирование текста.

Любая помощь?Должно ли форматирование выполняться в операторе Select?

1 Ответ

0 голосов
/ 29 октября 2018

, если это кому-нибудь поможет.Ниже будет решение.

    Dim forDownloadGV As New GridView()
    forDownloadGV.DataSource = ""
    forDownloadGV.DataBind()

    Dim myConnection As MySqlConnection
    Dim myDataAdapter As MySqlDataAdapter
    Dim myDataset As DataSet

    Dim strSQL As String

    myConnection = New MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("for_Read").ConnectionString)

    myConnection.Close()
    myConnection.Open()

    strSQL = "SELECT REPLACE(REPLACE(`Product_Desription`, char(13), '<br>'), CHAR(10), '<br>') as 'Description'from `Products`"
    myDataAdapter = New MySqlDataAdapter(strSQL, myConnection)

    myDataset = New DataSet()

    myDataAdapter.Fill(myDataset, "Products")

    forDownloadGV.DataSource = myDataset
    forDownloadGV.DataBind()

    Response.Clear()
    Response.Buffer = True
    Response.AddHeader("content-disposition", "attachment;filename=Products.xls")
    Response.Charset = ""
    Response.ContentType = "application/vnd.ms-excel"
    Dim sw As New StringWriter()
    Dim hw As New HtmlTextWriter(sw)

    hw.AddAttribute("xmlns:x", "urn:schemas-microsoft-com:office:excel") ' optional'
    hw.RenderBeginTag(HtmlTextWriterTag.Html)
    hw.RenderBeginTag(HtmlTextWriterTag.Head)
    hw.RenderBeginTag(HtmlTextWriterTag.Style)
    hw.Write("br {mso-data-placement:same-cell;}")
    hw.RenderEndTag() ' /Style'
    hw.RenderEndTag() ' /Head'
    hw.RenderBeginTag(HtmlTextWriterTag.Body)

    forDownloadGV.RenderControl(hw)

    hw.RenderEndTag() ' /Body'
    hw.RenderEndTag() ' /Html'

    Response.Write(HttpUtility.HtmlDecode(sw.ToString))    ' turns &lt;br/&gt; back into <br/>'
    Response.Flush()
    Response.End()
...