C#下载csv代码总结
一、C#导出csv格式代码如下:
1 /// <summary> 2 /// 下载 3 /// </summary> 4 /// <param name="startTime"></param> 5 /// <param name="endTime"></param> 6 public void Download(DateTime? startTime, DateTime? endTime) 7 { 8 Response<VSysLog> _rsp = new Response<VSysLog>(); 9 try 10 { 11 using (NetEntities et = new NetEntities()) 12 { 13 startTime = startTime == null ? DateTime.Now.AddMonths(-2) : startTime.Value; 14 endTime = endTime == null ? DateTime.Now : endTime.Value; 15 int deviceType = (int)EnumDeviceType.网关设备; 16 17 //搜索条件 18 var whereQuery = PredicateExtensions.True<net_warninglog>(); 19 //搜索条件---开始时间和结束时间 20 whereQuery = whereQuery.And(n => n.WarningTime >= startTime && n.WarningTime <= endTime); 21 //搜索条件---设备类型 22 whereQuery = whereQuery.And(n => n.DeviecType == deviceType); 23 //搜索条件---模糊查询 24 if (!string.IsNullOrEmpty(Request["condition"])) 25 { 26 string condition = Request["condition"]; 27 whereQuery = whereQuery.And(n => n.WarningSource.Contains(condition)); 28 } 29 List<VWarningLog> logList = et.net_warninglog.Where(whereQuery.Compile()).AsEnumerable().Select(n => 30 new VWarningLog 31 { 32 id = n.ID, 33 warningName = n.WarningName, 34 warningReason = n.WarningReason, 35 deviceType = Enum.GetName(typeof(EnumDeviceType), n.DeviecType), 36 warningSource = n.WarningSource, 37 descr = n.Descr, 38 warningTime = n.WarningTime.ToString("yyyy-MM-dd HH:mm:ss") 39 }).OrderByDescending(x => x.warningTime).ToList(); 40 41 System.IO.StringWriter sw = new StringWriter(); 42 StringBuilder sbTitle = new StringBuilder(); 43 System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 44 //定义模版(标题、内容字段、格式化参数) 45 string[,] template = new string[,] {{ "终端编号,", "warningSource", "{0}"}, { "设备类型,", "deviceType", "{0}" }, { "报警原因,", "warningReason", "{0}"}, 46 { "报警信息,", "warningName", "{0}" }, { "描述", "descr", "{0}" }, { "报警时间", "warningTime", "{0}" } }; 47 string strLine = ""; 48 sw = new StringWriter(); 49 //获取模板的行数 50 int colCount = template.GetLength(0); 51 //表头 52 for (int i = 0; i < colCount; i++) 53 { 54 //在模板里面已经添加了逗号 55 strLine += template[i, 0]; 56 } 57 strLine.Remove(strLine.Length - 1); 58 sw.WriteLine(strLine); 59 strLine = ""; 60 61 //表的内容 62 for (int j = 0; j < logList.Count; j++) 63 { 64 strLine = ""; 65 for (int k = 0; k < colCount; k++) 66 { 67 if (k > 0 && k < colCount) 68 { 69 strLine += ","; 70 } 71 string cell = ""; 72 string data = string.Format(template[k, 2], logList[j].GetType().GetProperty(template[k, 1]).GetValue(logList[j], null)); 73 if (string.IsNullOrEmpty(data)) 74 { 75 strLine += ""; 76 } 77 else 78 { 79 //前面加的单引号则是防止数字被转换成其它格式 80 cell = "'" + data.Trim(); 81 } 82 //防止里面含有特殊符号 83 if (!string.IsNullOrEmpty(cell)) 84 { 85 cell = cell.Replace("\"", "\"\""); 86 cell = "\"" + cell + "\""; 87 strLine += cell; 88 } 89 } 90 sw.WriteLine(strLine); 91 } 92 string attachment = "attachment; filename=" + DateTime.Now.ToString("yyyy年MM月dd日HH点") + "网关报警日志.csv"; 93 Response.Clear(); 94 Response.ClearHeaders(); 95 Response.ClearContent(); 96 Response.AddHeader("content-disposition", attachment); 97 Response.ContentType = "text/csv"; 98 Response.AddHeader("Pragma", "public"); 99 Response.Charset = "UTF-8"; 100 Response.ContentEncoding = System.Text.Encoding.UTF8; 101 Response.HeaderEncoding = System.Text.Encoding.UTF8; 102 //防止中文乱码 103 Response.BinaryWrite(new byte[] { 0xEF, 0xBB, 0xBF }); 104 response.Write(sw.ToString()); 105 Response.End(); 106 sw.Close(); 107 } 108 } 109 catch (Exception ex) 110 { 111 _rsp.code = (int)EnumCode.程序异常; 112 _rsp.msg = ex.Message; 113 LogHelper.WriteLog(className, "Download", ex); 114 } 115 }
仅作为保存,方便日后查看代码。