public ActionResult ExportFeedBack(string beginTime, string endTime) { Paging page = new Paging { PageIndex = 1, PageSize = 100000000 }; PagedList<GetCallCentreSearchForFeedBack_Result> list = CustomerBLL.Instance.GetFeedBack(beginTime, endTime, page); DataTable dt = ListToDataTable<GetCallCentreSearchForFeedBack_Result>(list); //开始处理导出EXCEL if (list.Count > 0) { string temp = string.Format("attachment;filename={0}", "FeedBackList.csv"); Response.ClearHeaders(); Response.AppendHeader("Content-disposition", temp); Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); Response.ContentType = "application/vnd.ms-excel;charset=gb2312"; DataSet ds = new DataSet(); ds.Tables.Add(dt); Response.Write(ExportCSV(ds)); Response.End(); } return View(); } /// <summary> /// 将泛类型集合List类转换成DataTable /// </summary> /// <param name="list">泛类型集合</param> /// <returns></returns> public static DataTable ListToDataTable<T>(List<T> entitys) { //检查实体集合不能为空 if (entitys == null || entitys.Count < 1) { throw new Exception("需转换的集合为空"); } //取出第一个实体的所有Propertie Type entityType = entitys[0].GetType(); PropertyInfo[] entityProperties = entityType.GetProperties(); //生成DataTable的structure //生产代码中,应将生成的DataTable结构Cache起来,此处略 DataTable dt = new DataTable(); for (int i = 0; i < entityProperties.Length; i++) { //dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType); dt.Columns.Add(entityProperties[i].Name); } //将所有entity添加到DataTable中 foreach (object entity in entitys) { //检查所有的的实体都为同一类型 if (entity.GetType() != entityType) { throw new Exception("要转换的集合元素类型不一致"); } object[] entityValues = new object[entityProperties.Length]; for (int i = 0; i < entityProperties.Length; i++) { entityValues[i] = entityProperties[i].GetValue(entity, null); } dt.Rows.Add(entityValues); } return dt; } /// <summary> /// 导出Excel. /// </summary> /// <param name="ds">The ds.</param> /// <returns></returns> /// 创建者:王宇 /// 创建日期:9/15/2014 11:42 AM /// 修改者: /// 修改时间: /// ------------------------------------ public string ExportCSV(DataSet ds) { string data = ""; //data = ds.DataSetName + "\n"; foreach (DataTable tb in ds.Tables) { //data += tb.TableName + "\n"; //原来 data += "问题反馈列表" + "\n"; //写出列名 foreach (DataColumn column in tb.Columns) { //data += column.ColumnName + ","; //原来 string columnName = GetColumnName(column.ColumnName); if (!string.IsNullOrEmpty(columnName)) { data += columnName + ","; } } data += "\n"; //写出数据 foreach (DataRow row in tb.Rows) { foreach (DataColumn column in tb.Columns) { //data += row[column].ToString() + ","; //原来 string value = GetColumnValue(column.ToString(), row[column].ToString()).Replace("\n", " "); if (value != "TMP") { data += value + ","; } } data += "\n"; } data += "\n"; } return data; } /// <summary> /// 获取列. /// </summary> /// <param name="columnName">列名称.</param> /// <returns></returns> /// 创建者:王宇 /// 创建日期:9/15/2014 11:42 AM /// 修改者: /// 修改时间: /// ------------------------------------ private string GetColumnName(string columnName) { string tmp = string.Empty; switch (columnName) { case "EmailOrPhone": tmp = "手机号/邮箱"; break; case "Source": tmp = "模板"; break; case "Path": tmp = "下单来源"; break; case "CreateDate": tmp = "反馈时间"; break; case "Content": tmp = "反馈内容"; break; default: break; } return tmp; } /// <summary> /// 获取列值. /// </summary> /// <param name="columnName">Name of the column.</param> /// <param name="value">The value.</param> /// <returns></returns> /// 创建者:王宇 /// 创建日期:9/15/2014 11:42 AM /// 修改者: /// 修改时间: /// ------------------------------------ private string GetColumnValue(string columnName, string value) { string tmp = string.Empty; switch (columnName) { case "OrderPath": tmp = "TMP"; break; case "Name": tmp = "TMP"; break; default: tmp = value; break; } return tmp; } |
|