webform的导出
呃 怎么说呢 我这个是公司大佬写好的 我直接调用 和以前写的百度上面的都不大一样 感觉很Nice 插个眼 说不定以后还得回来参考参考 具体是这样的 你先写好一个模板 就是你要导出的数据应该在Excal显示出什么样子 比如我现在需要导出这样的样子
ok 然后找个地方放好 随后写一个配置文件 ExportConfig.xml里面的内容如下
然后是一个ExcalHelper帮助类
public static class ExcelHelper {
//这里的三各参数 分别是一个数据结果集DataSet , 你刚写的配置文件模板的名字,然后就是一个导出Excal的名字 public static void ExprortExcel(DataSet set, string typeName, string fileName) { string outputFile = HttpContext.Current.Server.MapPath(string.Format("~/Temp/Temp/{0}", fileName)); var tempDirectory = HttpContext.Current.Server.MapPath("~/Temp/Temp/"); var files = Directory.GetFiles(tempDirectory); try { foreach (string item in files) { File.Delete(item); } } catch (Exception) { } ExportMain.GetProductDescription(); set.DataSetName = typeName; ExportMain.Export(set, outputFile); ToClient(outputFile); } public static void ToClient(string filePath) { try { FileInfo info = new FileInfo(filePath); System.Web.HttpContext.Current.Response.Clear(); System.Web.HttpContext.Current.Response.Charset = "UTF-8"; System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8; // 添加头信息,为"文件下载/另存为"对话框指定默认文件名 System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(info.Name, System.Text.Encoding.UTF8)); // 添加头信息,指定文件大小,让浏览器能够显示下载进度 System.Web.HttpContext.Current.Response.AddHeader("Content-Length", info.Length.ToString()); // 指定返回的是一个不能被客户端读取的流,必须被下载 System.Web.HttpContext.Current.Response.ContentType = "application/ms-excel"; // 把文件流发送到客户端 System.Web.HttpContext.Current.Response.WriteFile(info.FullName); // File.Delete(file.FullName); // 停止页面的执行 HttpContext.Current.Response.End(); } catch (Exception ex) { throw ex; } finally { if (File.Exists(filePath)) { File.Delete(filePath); } } } }
//调用
//建立一个DataSet
DataSet set = new DataSet();
//建立一个DataTable
DataTable table = new DataTable("Body");//这里的名字是你配置文件里的source的名字
//之后为这个Table创建列
table.Columns.Add("Year", typeof(int));//年度
table.Columns.Add("ProvinceName", typeof(string));//省份
table.Columns.Add("CourseName", typeof(string));//文理
table.Columns.Add("MinScore", typeof(int));//分数开始
table.Columns.Add("MaxScore", typeof(int));//分数截止
table.Columns.Add("SameNumber", typeof(int));//同分人数
table.Columns.Add("LowestRank", typeof(int));//最低位次
table.Columns.Add("HighestRank", typeof(int));//最高位次
table.Columns.Add("istrue", typeof(string));//是否正确值
//循环追加数据 随便你
table.Rows.Add(列1,列2,列3,列4,列5,列6,列7,列8,列9);
//然后将这个table放到DataSet中
set.Tables.Add(table);
//最后调用ExcalHelper帮助类传进需要的参数就OK了
ExcalHelper(set,"OneParagraph","导出Excal的文件名");
后面还会补充多工作表 或者 有跨行表头的 感谢你能看完
只是想到这个点,以后还有可能在使用的时候会遇到,做个记录。