2015-10-01 25 views
0

我想導出sql表格爲excel文件。 我的代碼:如何將sql表導出爲ex​​cel而不會丟失格式?

public void ExportToExcel(string strQuery) 
{ 
    //Get the data from database into datatable 
    OleDbCommand cmd = new OleDbCommand(strQuery); 
    DataTable dt = GetData(cmd); 

    //Create a dummy GridView 
    GridView GridView1 = new GridView(); 
    GridView1.AllowPaging = false; 
    GridView1.DataSource = dt; 
    GridView1.DataBind(); 

    HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.ClearContent(); 
    HttpContext.Current.Response.Buffer = true; 
    HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls"); 
    HttpContext.Current.Response.Charset = ""; 
    HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter hw = new HtmlTextWriter(sw); 

    for (int i = 0; i < GridView1.Rows.Count; i++) 
    { 
     //Apply text style to each Row 
     GridView1.Rows[i].Attributes.Add("class", "textmode"); 
    } 
    GridView1.RenderControl(hw); 

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

,並在aspx頁面的按鈕:

protected void ExportToExcel(object sender, EventArgs e) 
{ 
    ExportClass Exc = new ExportClass(); 
    string wherestr = null; 
    if ((StartTBX.Text.Length > 0) && (EndTBX.Text.Length > 0)) { wherestr = String.Format("((STATUS = 'User' And PostStatus='Default') or STATUS = 'Admin') And (CreateDate >='{0}' And CreateDate <='{1}')", StartTBX.Text, EndTBX.Text); } 
    else if (StartTBX.Text.Length > 0) { wherestr = String.Format("((STATUS = 'User' And PostStatus='Default') or STATUS = 'Admin') And CreateDate >='{0}'", StartTBX.Text); } 
    else if (EndTBX.Text.Length > 0) { wherestr = String.Format("((STATUS = 'User' And PostStatus='Default') or STATUS = 'Admin') And CreateDate <='{0}'", EndTBX.Text); } 
    else { wherestr = "((STATUS = 'User' And PostStatus='Default') or STATUS = 'Admin')"; } 
    Exc.ExportToExcel("SELECT Users.UserID, UserName, Status, LockUser, FName + ' ' + Lname as [نام کامل] FROM Users inner join UsersInfo on Users.UserID=UsersInfo.UserID WHERE " + wherestr + " ORDER BY CreateDate DESC"); 
} 

當我不使用代碼日期過濾(最後其他的代碼),每一件事情是好的,但是當我使用日期過濾,[نامککم]格式的內容將丟失。 [نامکامل]的內容是非英語單詞。

無日期過濾器:

enter image description here

與日期過濾器:

enter image description here

請幫助我。非常感謝。

回答

0

好,我的問題解決與此代碼:

HttpContext.Current.Response.ContentEncoding = Encoding.Unicode; 
HttpContext.Current.Response.BinaryWrite(Encoding.Unicode.GetPreamble()); 

最誠摯的問候。