0

我们想从数据创建一个 CSV 文件。它显示 HTML 标记。同样适用于 xlx 文件。下面是代码。

     Dim response As System.Web.HttpResponse = System.Web.HttpContext.Current.Response
        response.Clear()
        response.ClearHeaders()
        response.Write("<meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8""/>")

        'Chose what type of file needed ie.e CSV /XLS
        If _exportType = ExportTypeEnum.CSV Then
            response.ContentType = "application/vnd.xls"
        Else
            response.ContentType = "application/vnd.xls"
        End If

        response.AddHeader("Content-Disposition", "attachment;filename=" & FileNameToExport)
        Dim sw As System.IO.StringWriter = New StringWriter()

        Dim htw As HtmlTextWriter = New HtmlTextWriter(sw)

        Dim dg As DataGrid = New DataGrid()
        Dim dv1 As DataView = data 
        dg.DataSource = dv1
        dg.BorderStyle = BorderStyle.None
        dg.DataBind()
        dg.RenderControl(htw)
        response.Write(sw.ToString())
        response.End()

请提出为什么它不适用于 CSV 文件,尽管它适用于 xls 文件。

提前谢谢了

4

1 回答 1

1

您正在以 HTML 格式显式编写输出。注意这一行:

response.Write("<meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8""/>")

并注意您用于编写输出的对象:

Dim htw As HtmlTextWriter = New HtmlTextWriter(sw)

这都是将 HTML 发送到输出。它对 Excel 文件“工作正常”,因为 Excel 在呈现文件时理解 HTML 结构。然而,CSV 是一种更“扁平化”的格式,并且只知道纯文本(由逗号分隔)。例如,如果您使用此代码写入.txt文件,您还将看到 HTML 标记。

如果您想要一个没有 HTML 的 CSV 文件,则不应向其中写入 HTML 内容。

于 2013-09-26T13:52:27.790 回答