将gridview导出到Excel

时间:2015-05-07 01:16:06

标签: c# asp.net excel gridview arabic

我在将网格视图导出到Excel时识别阿拉伯字符时遇到问题。阿拉伯语文本显示为“Ø®Ù​​”اØμ“,它无法识别阿拉伯语数据以及阿拉伯语gridview标题

我正在使用以下代码将Excel导出到同一个Web应用程序中的多个网格视图,它可以正常工作并识别阿拉伯文本

protected void BtnExportDateSearch_Click(object sender, EventArgs e)
{
    Response.Clear();

    Response.AddHeader("content-disposition", "attachment;filename=ExportDataDateSearch.xls");

    HttpContext.Current.Response.Charset = "UTF-8";
    HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;

    Response.ContentType = "application/vnd.xls";
    StringWriter StringWriter = new System.IO.StringWriter();

    HtmlTextWriter HtmlTextWriter = new HtmlTextWriter(StringWriter);
    GridView1.RenderControl(HtmlTextWriter);

    Response.Write(StringWriter.ToString());
    Response.End();
}

我拥有的案例之间的区别,如果我从通常的选择查询中检索数据到gridview,它会识别阿拉伯语文本 但是如果我使用unpivot和CASE语句,阿拉伯语在asp页面的gridview上被查看为ok,但是当我将它导出到excel时,无法识别阿拉伯语文本。

这是存储过程,它是我的gridview的数据源:

ALTER PROCEDURE [dbo].[UnpivotApprovedPalms]
    @StartDateTime datetime2(7),
    @EndDateTime datetime2(7)
AS
BEGIN
    SELECT 
        FarmID, 
        CASE PalmsName 
            WHEN 'kalas' THEN N'خلاص'
            WHEN 'khnizi' THEN N'خنيزي'
            WHEN 'jashKharma' THEN N'جش خرمة'
            WHEN 'anbaratAlMadina' THEN N'عنبرة المدينة'
            WHEN 'NabtatSaif' THEN N'نبتة سيف'
            ELSE PalmsName 
        END AS 'PalmsName',
        Quantity, TransactionDateTime
    FROM 
        [ApprovedPalmsInFarm] 
    UNPIVOT
        (Quantity
         FOR PalmsName IN ([kalas], [khnizi], [jashKharma], [anbaratAlMadina])
        ) u   
    WHERE
        u.TransactionDateTime >= @StartDateTime 
        AND u.TransactionDateTime <= @EndDateTime;

    RETURN
END

导致此问题的代码有什么问题?乳清当我更改查询它工作正常,但特别是我的unpivot查询与案例陈述阿拉伯语无法识别? asp页面可以正确查看带有阿拉伯文本的gridview,但只有当我将它导出到Excel时才会识别出阿拉伯语

1 个答案:

答案 0 :(得分:6)

Byte Order Mark (BOM)添加到Excel文件的标题

 Response.AddHeader("content-disposition", "attachment;filename=ExportDataDateSearch.xls");

// Insert below
Response.ContentEncoding = System.Text.Encoding.Unicode;
Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());

参考:ASP.NET Excel export encoding problem