1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8.  
  9. namespace Utilities.IO
  10. {
  11.  
  12. /// <summary>
  13. /// 标记属性的别名Title
  14. /// </summary>
  15. public class AttrForCsvColumnLabel : Attribute
  16. {
  17. public string Title { get; set; }
  18. }
  19.  
  20. public static class CsvFileUtility
  21. {
  22.  
  23. /// <summary>
  24. /// Save the List data to CSV file
  25. /// </summary>
  26. /// <param name="dataList">data source</param>
  27. /// <param name="filePath">file path</param>
  28. /// <returns>success flag</returns>
  29. public static bool SaveDataToCSVFile<T>(List<T> dataList, string filePath) where T : class
  30. {
  31.  
  32. bool successFlag = true;
  33.  
  34. StringBuilder sb_Text = new StringBuilder();
  35. StringBuilder strColumn = new StringBuilder();
  36. StringBuilder strValue = new StringBuilder();
  37. StreamWriter sw = null;
  38. var tp = typeof(T);
  39. PropertyInfo[] props = tp.GetProperties(BindingFlags.Public | BindingFlags.Instance);
  40.  
  41. try
  42. {
  43. //sw = new StreamWriter(filePath);
  44. for (int i = 0; i < props.Length; i++)
  45. {
  46. var itemPropery = props[i];
  47. AttrForCsvColumnLabel labelAttr = itemPropery.GetCustomAttributes(typeof(AttrForCsvColumnLabel), true).FirstOrDefault() as AttrForCsvColumnLabel;
  48. if (null != labelAttr)
  49. {
  50. strColumn.Append(labelAttr.Title);
  51. }
  52. else
  53. {
  54. strColumn.Append(props[i].Name);
  55. }
  56.  
  57. strColumn.Append(",");
  58. }
  59. strColumn.Remove(strColumn.Length - 1, 1);
  60. //sw.WriteLine(strColumn);
  61. //write the column name
  62. sb_Text.AppendLine(strColumn.ToString());
  63.  
  64. for (int i = 0; i < dataList.Count; i++)
  65. {
  66. var model = dataList[i];
  67. //strValue.Remove(0, strValue.Length);
  68. //clear the temp row value
  69. strValue.Clear();
  70. for (int m = 0; m < props.Length; m++)
  71. {
  72. var itemPropery = props[m];
  73. var val = itemPropery.GetValue(model, null);
  74. if (m == 0)
  75. {
  76. strValue.Append(val);
  77. }
  78. else
  79. {
  80. strValue.Append(",");
  81. strValue.Append(val);
  82. }
  83. }
  84.  
  85. //sw.WriteLine(strValue);
  86. //write the row value
  87. sb_Text.AppendLine(strValue.ToString());
  88. }
  89. }
  90. catch (Exception ex)
  91. {
  92. successFlag = false;
  93. }
  94. finally
  95. {
  96. if (sw != null)
  97. {
  98. sw.Dispose();
  99. }
  100. }
  101.  
  102. File.WriteAllText(filePath, sb_Text.ToString(), Encoding.Default);
  103.  
  104. return successFlag;
  105. }
  106. }
  107. }

  

C# 将List数据 导出到csv 文件的更多相关文章

  1. es实战之数据导出成csv文件

    从es将数据导出分两步: 查询大量数据 将数据生成文件并下载 本篇主要是将第二步,第一步在<es实战之查询大量数据>中已讲述. csv vs excel excel2003不能超过6553 ...

  2. vue.js纯前端处理如何将后台返回来的csv数据导出成csv文件

    需要实现一个下载csv文件的功能,但后台没有对这个下载文件进行处理,而是将csv数据传给前台而已,需要前台做一下处理. 这是按钮的代码: <a> <el-button size=&q ...

  3. R: 导入 csv 文件,导出到csv文件,;绘图后导出为图片、pdf等

    ################################################### 问题:导入 csv 文件 如何从csv文件中导入数据,?参数怎么设置?常用参数模板是啥? 解决方 ...

  4. Elasticsearch:如何把Elasticsearch中的数据导出为CSV格式的文件

    本教程向您展示如何将数据从Elasticsearch导出到CSV文件. 想象一下,您想要在Excel中打开一些Elasticsearch中的数据,并根据这些数据创建数据透视表. 这只是一个用例,其中将 ...

  5. Datagrid数据导出到excel文件的三种方法

    原文连接: http://www.cnblogs.com/xieduo/articles/606202.html 一.文件保存在服务器,提供下载 方法一:导出到csv文件,存放在服务器端任一路径,然后 ...

  6. datagrid数据导出到excel文件给客户端下载的几种方法

    方法一:导出到csv文件,存放在服务器端任一路径,然后给客户下载 优点: 1.可以进行身份认证后给客户下载,如果放到非web目录就没有对应的url,客户无法随时下载. 2.也是因为生成了文件,所以占用 ...

  7. java导出生成csv文件

    首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分隔的,对比如下图: txt中显示: 修改文件后缀为csv后显示如下: 在java中我 ...

  8. hive表数据导出到csv乱码原因及解决方案

    转载自http://blog.csdn.net/lgdlxc/article/details/42126225 Hive表中的数据使用hive - e"select * from table ...

  9. oracle导出多CSV文件的靠谱的

    oracle导出多CSV文件的问题 ---------------------------------------------------------------------- 用ksh脚本从orac ...

随机推荐

  1. LUAMD5加密

    md5里的方法: C:\Windows\System32>lua Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > require( ...

  2. C++ STL IO流 与 Unicode (UTF-16 UTF-8) 的协同工作

    09年研究技术的大神真的好多,本文测试有很多错误,更正后发布下(可能与编辑器相关). file.imbue(locale(file.getloc(), new codecvt_utf8<wcha ...

  3. ubuntu 14.04 安装wordpress

    转者注:若没有Apache + PHP + MySQL环境,请参考我的这篇博客 (1)首先下载wordpress, sudo wget http://wordpress.org/latest.tar. ...

  4. POJ_1485_dp

    题目描述: 每组数据给n个点,点按一维坐标升序给出,要求划分成k块,在每一块中,取一个站,要求每个块中所有的点到站的距离的和的总和最小. 思路: dp题,dp[i][j]表示i个点分成j块的最小距离, ...

  5. Spacemacs安装

    Spacemacs官网 为什么选择Spacemacs Spacemacs是一个已经配好的Emacs和Vim,正如官网所说的The best editor is neither Emacs nor Vi ...

  6. css中flex布局

    一.Flex布局是什么? Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局. .box{ display: flex; ...

  7. Python socket 基础(Client) - Foundations of Python Socket

    Python socket 基础- Foundations of Python Socket 建立socket - establish socket import socket s = socket. ...

  8. javascript HierarchicalTaskAnalysis-hta编程(.hta)

    main.hta  code: <script>window.resizeTo(400,300);</script> <head> <hta:applicat ...

  9. javascript原生ajax请求

    class Ajax{ constructor(url, method, data, callback_suc, callback_err, callback_run){ this.RT = true ...

  10. 《自拍教程5》Python自动化测试学习思路

    前提:熟悉测试业务及流程 任何Python自动化测试的前提,都是必须先熟悉实际测试业务. 任何脱离实际测试业务的自动化都是噱头且无实际意义! 测试的基本流程基本是: 测试需求分析,测试用例设计与评审, ...