[轉發]導出Excel 格式 mso-number-format


應用中經常會遇到要從系統或數據庫中導出數據平面文件,一般是導出到txt,csv或excel。txt和csv一般用在系統間的數據交換,而 excel一般有較好的顯示效果,可以按照一定的模板導出,導出就不用再排版了,使用簡單,如果是使用做報表一般都導出excel文件。 

但是使用com組件導出到Excel數據很慢,有另一種生成excel文件的方式就是通過html和css快速導出數據同時並能設置樣式,使用這種方式有兩個優點:1是速度快,2是不需安裝excel支持。 
  當使用這種方法導出文件時,有時會遇到一個問題,就是導出的Excel經常會把我們的數據自動識別為其他格式,例如只有純數字的字段在導出到 Excel后會被自動識別為數字格式,而一旦數字超過11位,Excel便會將其以科學計數法的形式來顯示,比如身份證號碼,帶區號的電話號碼等。 

  解決方法有多種,這里只介紹一種本人認為最好的一種,即使用CSS給出現問題的表格字段(如<TD>)應用mso-number- format屬性,用這個屬性指定某單元格的數據格式,避免Excel自動轉換格式。mso-number-format是Office提供的格式, 如果您將office文檔轉成HTML就會有這樣的標志。MSO表示Microsoft Office。 

示例: 

<style type="text/css"> 
.format{ 
mso-number-format:'\@'; 

</style> 

<td class="format">123456789012345</td> 

  在css中加入:mso-number-format定義數據格式,格式可以在excel中查看自定義格式,具體可以參考一下:
mso-number-format:"0" NO Decimals  
mso-number-format:"0\.000" 3 Decimals  
mso-number-format:"\#\,\#\#0\.000" Comma with 3 dec  
mso-number-format:"mm\/dd\/yy" Date7  
mso-number-format:"mmmm\ d\,\ yyyy" Date9  
mso-number-format:"m\/d\/yy\ h\:mm\ AM\/PM" D -T AMPM  
mso-number-format:"Short Date" 01/03/1998  
mso-number-format:"Medium Date" 01-mar-98  
mso-number-format:"d\-mmm\-yyyy" 01-mar-1998  
mso-number-format:"Short Time" 5:16  
mso-number-format:"Medium Time" 5:16 am  
mso-number-format:"Long Time" 5:16:21:00  
mso-number-format:"Percent" Percent - two decimals  
mso-number-format:"0%" Percent - no decimals  
mso-number-format:"0\.E+00" Scientific Notation  
mso-number-format:"\@" Text  
mso-number-format:"\#\ ???\/???" Fractions - up to 3 digits (312/943)  

 1 public bool ExportToExcel(System.Data.DataTable dataTable, System.Web.HttpContext curContext)
 2 {
 3     System.Web.UI.WebControls.DataGrid dgExport = null;
 4     // 當前對話   
 5     //System.Web.HttpContext curContext = System.Web.HttpContext.Current;  
 6     // IO用於導出並返回excel文件   
 7     System.IO.StringWriter strWriter = null;
 8     System.Web.UI.HtmlTextWriter htmlWriter = null;
 9 
10     if (dataTable != null && dataTable.Rows.Count > 0)
11     {
12         //轉換列名為中文  
13         for (int i = 0; i < dataTable.Columns.Count; i++)
14         {
15             dataTable.Columns[i].ColumnName = ColNameConvertToName(dataTable.Columns[i].ColumnName);
16         }
17 
18         // 設置編碼和附件格式   
19         curContext.Response.ContentType = "application/vnd.ms-excel";
20         curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
21         curContext.Response.Charset = "";
22         curContext.Response.AppendHeader("Content-Disposition", "attachment;filename= export.xls");
23 
24         // 導出excel文件   
25         strWriter = new System.IO.StringWriter();
26         htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
27 
28         // 為了解決dgData中可能進行了分頁的情況,需要重新定義一個無分頁的DataGrid   
29         dgExport = new System.Web.UI.WebControls.DataGrid();
30         dgExport.DataSource = dataTable.DefaultView;
31         dgExport.AllowPaging = false;
32         dgExport.DataBind();
33 
34         // 返回客戶端   
35         dgExport.RenderControl(htmlWriter);
36         curContext.Response.Write(strWriter.ToString().Replace("<td", "<td STYLE='MSO-NUMBER-FORMAT:\\@'"));
37         curContext.Response.End();
38 
39         return true;
40     }
41 
42     return false;
43 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM