代碼 public class DataContent { public string Name { set; get; } public string Address { set; get; } public string Phone { set; get; }
public string GetContentByIndex(int index) { string Value = string.Empty; switch (index) { case 1: Value = Name; break; case 2: Value = Address; break; case 3: Value = Phone; break; default: Value = ""; break; } return Value; } }
b) 最簡方法:直接通過拼湊HTML字符串來生成excel文件,優(yōu)點是:代碼十分方便,無需任何的office接口擴展即可工作;不足為:覆蓋的單元格有限,雖然可以通過中間方法來設(shè)置,但仍存在打開時提示格式不正確的問題,隨不影響正常瀏覽及編輯,但對于一些需要通過代碼操作excel文件的應(yīng)用,可能會遇到問題,比如通過OleDB來讀取內(nèi)容的時候等。
1 Public void GetExcelDataToClient() 2 { 3 List<DataContent> arrDatas = new List<DataContent>() { 4 new DataContent() { Address="aaa", Name="aaa", Phone="aaa" }, 5 new DataContent() { Address="bbb", Phone="bbb", Name="bbb" }, 6 new DataContent() { Name="ccc", Phone="ccc", Address="ccc"} 7 }; 8 9 StringBuilder sb = new StringBuilder("<HTML xmlns:o=/"urn:schemas-microsoft-com:office:office/" xmlns:x=/"urn:schemas-microsoft-com:office:excel/" xmlns=/"http://www.w3.org/TR/REC-html40/"><HEAD><META HTTP-EQUIV=/"Content-Type/" content=/"text/html; charset=gb_2312-80/"><TITLE></TITLE><style>td{mso-number-format:/"//@/";}</style></HEAD><BODY><TABLE border=/"1/">", 500); 10 // title columns. 11 sb.Append(string.Format("<TR><TD><B>Event_CourseId<B/></TD><TD><B>UserId</B></TD><TD><B>Attended</B></TD>{0}</TR>", GetExCells(30))); 12 // content columns. 13 foreach (DataContent data in arrDatas) 14 sb.Append(string.Format("<TR><TD>{0}</TD><TD>{1}</TD><TD>{2}</TD>{3}</TR>", data.Name, data.Address, data.Phone, GetExCells(30))); 15 // add extension rows. 16 sb.Append(GetExRows(50, 33)); 17 // last part. 18 sb.Append("</TABLE></BODY></HTML>"); 19 // response the result as a excel file. 20 Response.ContentType = "application/vnd.ms-excel"; 21 Response.AddHeader("Content-Disposition", "attachment; filename=DataList.xls;filetype=excel"); 22 Response.ContentEncoding = Encoding.GetEncoding("utf-8"); 23 Response.Write(sb.ToString()); 24 Response.Flush(); 25 Response.End(); 26 } 27 // add the extension cells. 28 PRivate string GetExCells(int num) 29 { 30 StringBuilder sb = new StringBuilder(200); 31 for (int i = 0; i < num; i++) 32 sb.Append("<TD></TD>"); 33 return sb.ToString(); 34 } 35 // add the extension rows. 36 private string GetExRows(int rowNum, int colNum) 37 { 38 StringBuilder sb = new StringBuilder(200); 39 for (int i = 0; i < rowNum; i++) 40 sb.Append(string.Format("<TR>{0}</TR>", GetExCells(colNum))); 41 return sb.ToString(); 42 }
c) 通用接口方法:主要通過調(diào)用Office提供的接口組件Microsoft.Office.Interop.Excel,來生成excel文件,其特點是可以消除內(nèi)容單元格覆蓋不全的問題,而且也可以消除打開提示格式異常的問題,但針對通過OleDB來操作文件的情況,還必須按照一種比較嚴格的方式進行編寫才成,否則就會出現(xiàn)操作過程中格式異常的問題,下面為標準的寫法: