Response.ClearContent(); Response.Buffer = true; Response.AppendHeader("Content-Disposition", "attachment;filename=members.xls"); Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); Response.ContentType = "application/ms-excel"; System.IO.StringWriter oStringWriter = new System.IO.StringWriter(); 下面定义一个ArrayList ArrayList al = 绑定数据源; 然后输出的格式,定义在execl中有几列: oStringWriter.WriteLine("1/t 2/t 3 /t 4 /t 5 /t 6 /t 7 /t 8 /t/n ); /t是空格,/n是换行 下一步循环数据: for (int i = 0; i < al.Count; i++) { oStringWriter.WriteLine(((实例化类名)al[i]).表里的字段.ToString()+"/t"+后面以此类推写上表里的字段); } Response.Write(oStringWriter.ToString()); Response.End(); 这样就好了,为了大家看的更清楚,我把自己做的案例贴上 Response.ClearContent(); Response.Buffer = true; //Response.Charset = "utf-8"; Response.AppendHeader("Content-Disposition", "attachment;filename=members.xls"); Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); Response.ContentType = "application/ms-excel"; System.IO.StringWriter oStringWriter = new System.IO.StringWriter(); ArrayList al = clMember.List; oStringWriter.WriteLine("Salutation /t First Name/t Last Name /t Company /t Address /t City /t Country /t Tel /t Mobile /t DID /t Fax /t Accept EDM mailers /t e_new /t SMS /t Preferred language /t Hotel /t ed+m options /t Interested Cities /t Interested In SP /t Interested In SPG /t Account status/t/n"); for (int i = 0; i < al.Count; i++) { String[] strOutlet = ((CMMember)al[i]).Outlet.Split(','); String ArrOutlet = ""; for (int j = 0; j < strOutlet.Length; j++) { if (((CMMember)al[i]).Outlet.Contains("others")) { if (((CMMember)al[i]).Outlet_other.Length > 0) { ArrOutlet = "others(" + ((CMMember)al[i]).Outlet_other + ")"; } } CMOutlet cmOutlet = new CMOutlet(strOutlet[j]); ArrOutlet += cmOutlet.Name + ","; } if (ArrOutlet.Length > 0) { ArrOutlet = ArrOutlet.Substring(0, ArrOutlet.Length - 1); } if (((CMMember)al[i]).Outlet.Contains("others")) { if (((CMMember)al[i]).Outlet_other.Length > 0) { ArrOutlet = "others(" + ((CMMember)al[i]).Outlet_other + ")"; } } String[] strHotel = ((CMMember)al[i]).Hotel.Split(','); String ArrHotel = ""; for (int m = 0; m < strHotel.Length; m++) { CMHotel cmhotel = new CMHotel(strHotel[m]); ArrHotel += cmhotel.Name + ","; } if (ArrHotel.Length > 0) { ArrHotel = ArrHotel.Substring(0, ArrHotel.Length - 1); } oStringWriter.WriteLine(((CMMember)al[i]).Salutation.ToString()+((CMMember)al[i]).Salutation_chi.ToString() + "/t" + ((CMMember)al[i]).Firstname.ToString() + "/t" + ((CMMember)al[i]).Lastname.ToString() + "/t" + ((CMMember)al[i]).Company.ToString() + "/t" + ((CMMember)al[i]).Address.ToString() + "/t" + ((CMMember)al[i]).City.ToString() + "/t" + ((CMMember)al[i]).Country.ToString() + "/t" + ((CMMember)al[i]).Tel.ToString() + "/t" + ((CMMember)al[i]).Mobile.ToString() + "/t" + ((CMMember)al[i]).Did.ToString() + "/t" + ((CMMember)al[i]).Fax.ToString() + "/t" + ((CMMember)al[i]).Interestedm.ToString() + "/t" + ((CMMember)al[i]).E_New.ToString() + "/t" + ((CMMember)al[i]).SMS.ToString() + "/t" + ((CMMember)al[i]).Language.ToString() + "/t " + ArrHotel.ToString() + "/t" + ArrOutlet.ToString() + "/t" + ((CMMember)al[i]).RetrieveInterestcity().ToString() + "/t" + ((CMMember)al[i]).Interestsp.ToString() + "/t" + ((CMMember)al[i]).Interestspg.ToString() + "/t" + ((CMMember)al[i]).Status.ToString()); } Response.Write(oStringWriter.ToString()); Response.End();