1. public class CSVHelper
  2. {
  3. /// <summary>
  4. /// CSV转换成DataTable(OleDb数据库访问方式)
  5. /// </summary>
  6. /// <param name="csvPath">csv文件路径</param>
  7. /// <returns></returns>
  8. public static DataTable CSVToDataTableByOledb(string csvPath)
  9. {
  10. DataTable csvdt = new DataTable("csv");
  11. if (!File.Exists(csvPath))
  12. {
  13. throw new FileNotFoundException("csv文件路径不存在!");
  14. }
  15.  
  16. FileInfo fileInfo = new FileInfo(csvPath);
  17. using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileInfo.DirectoryName + ";Extended Properties='Text;'"))
  18. {
  19. OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [" + fileInfo.Name + "]", conn);
  20. adapter.Fill(csvdt);
  21. }
  22. return csvdt;
  23. }
  24.  
  25. /// <summary>
  26. /// CSV转换成DataTable(文件流方式)
  27. /// </summary>
  28. /// <param name="csvPath">csv文件路径</param>
  29. /// <returns></returns>
  30. public static DataTable CSVToDataTableByStreamReader(string csvPath)
  31. {
  32. DataTable csvdt = new DataTable("csv");
  33.  
  34. int intColCount = ;
  35. bool blnFlag = true;
  36. DataColumn column;
  37. DataRow row;
  38. string strline = null;
  39. string[] aryline;
  40.  
  41. using (StreamReader reader = new StreamReader(csvPath, FileUtil.GetEncoding(csvPath)))
  42. {
  43. while (!string.IsNullOrEmpty((strline = reader.ReadLine())))
  44. {
  45. aryline = strline.Split(new char[] { ',' });
  46.  
  47. if (blnFlag)
  48. {
  49. blnFlag = false;
  50. intColCount = aryline.Length;
  51. for (int i = ; i < aryline.Length; i++)
  52. {
  53. column = new DataColumn(aryline[i]);
  54. csvdt.Columns.Add(column);
  55. }
  56. continue;
  57. }
  58.  
  59. row = csvdt.NewRow();
  60. for (int i = ; i < intColCount; i++)
  61. {
  62. row[i] = aryline[i];
  63. }
  64. csvdt.Rows.Add(row);
  65. }
  66. }
  67.  
  68. return csvdt;
  69. }
  70.  
  71. /// <summary>
  72. /// DataTable 生成 CSV
  73. /// </summary>
  74. /// <param name="dt">DataTable</param>
  75. /// <param name="csvPath">csv文件路径</param>
  76. public static void DataTableToCSV(DataTable dt, string csvPath)
  77. {
  78. if (null == dt)
  79. return;
  80.  
  81. StringBuilder csvText = new StringBuilder();
  82. StringBuilder csvrowText = new StringBuilder();
  83. foreach (DataColumn dc in dt.Columns)
  84. {
  85. csvrowText.Append(",");
  86. csvrowText.Append(dc.ColumnName);
  87. }
  88. csvText.AppendLine(csvrowText.ToString().Substring());
  89.  
  90. foreach (DataRow dr in dt.Rows)
  91. {
  92. csvrowText = new StringBuilder();
  93. foreach (DataColumn dc in dt.Columns)
  94. {
  95. csvrowText.Append(",");
  96. csvrowText.Append(dr[dc.ColumnName].ToString().Replace(',', ' '));
  97. }
  98. csvText.AppendLine(csvrowText.ToString().Substring());
  99. }
  100.  
  101. File.WriteAllText(csvPath, csvText.ToString(), Encoding.Default);
  102. }
  103. }

封装一个CSVHelper的更多相关文章

  1. 自己封装一个Log模块

    Unity自己有log系统,为什么要自己封装一个 1.不好用,只能在pc上记录log文件,移动平台是没有的 2.在开发时期的log,不想在正式版里面出现.没有一个统一的开关来控制是不是要显示log,要 ...

  2. PHP封装一个通用好用的文件上传处理类

    封装一个文件上传类完成基本功能如下: 1.可上传多个或单个文件 2.上传成功返回一个或多个文件名 3.上传失败则返回每个失败文件的错误信息 上传类中的基本功能: 1.构造参数,用户可以自定义配置参数, ...

  3. Swift - 简单封装一个工具类模板

    创建模板类(封装一个类) 例1:新建一个名字叫做 Product 的类 Product.swift File 的内容 class Product { var name: String var desc ...

  4. 使用xib封装一个自定义view的步骤

    使用xib封装一个自定义view的步骤 1> 新建一个继承UIView的自定义view,假设类名叫做(MJAppView) 2> 新建一个MJAppView.xib文件来描述MJAppVi ...

  5. yii2封装一个类控制div宽度,高度

    1.首先,封装一个类,放在文件夹vendor下,命名为articls.php. <?phpclass Articles{ //测试    function add()    {        r ...

  6. C 封装一个简单二叉树基库

    引文 今天分享一个喜欢佩服的伟人,应该算人类文明极大突破者.收藏过一张纸币类型如下 那我们继续科普一段关于他的简介 '高斯有些孤傲,但令人惊奇的是,他春风得意地度过了中产阶级的一生,而  没有遭受到冷 ...

  7. IOS中封装一个View的思路

    一.封装一个View的思路 1.将View内部的业务逻辑(显示内容)封装到View中 2.一般情况下,View的位置应该由父控件来决定,也就是位置不应该固定死在View内部 3.至于View的宽高,根 ...

  8. 使用libzplay库封装一个音频类

    装载请说明原地址,谢谢~~      前两天我已经封装好一个duilib中使用的webkit内核的浏览器控件和一个基于vlc的用于播放视频的视频控件,这两个控件可以分别用在放酷狗播放器的乐库功能和MV ...

  9. 简易封装一个带有占位文字的TextView

    在实际iOS应用开发中我们经常会用到类似于下图所示的界面,即带有占位文字的文本框:

随机推荐

  1. 理解Underscore中的uniq函数

    uniq函数,是Underscore中的一个数组去重函数,给它传递一个数组,它将会返回该数组的去重副本. 1 ES6版本去重 在ES6版本中,引入了一个新的数据结构——set,这是一种类似数组的数据结 ...

  2. websphere 配置库中已存在应用程序,异常处理

    from:http://mengdboy.iteye.com/blog/1677379 出现此问题的原因之一:操作界面上没有卸载完成. 进行一下操作: 1.删除 $WAS_HOME/profiles/ ...

  3. UIView 动画 依赖与 CALayer的证据

    - (nullable id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event Layer: -(voi ...

  4. BZOJ1037:[ZJOI2008]生日聚会Party(DP)

    Description 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party.hidadz带着朋友们来到花园中,打算坐成一排玩游戏. 为了游戏不至于无聊,就座的方案应满足如下条件: ...

  5. php-------面向对象详解

    php面向对象详解 面向对象 对象概念是面向对象技术的核心.在显示世界里我们所面对的事情都是对象,如计算机.电视机.自行车等.在面向对象的程序设计中,对象是一个由信息及对信息进行处理的描述所组成的整体 ...

  6. Linux学习总结(十)-文件复制及查看, 环境变量

    一 文件复制及移动 1.命令 cp --------copy 的意思格式 cp 选项 源文件 目标文件a: 对于文件我们直接cp 文件 目标文件假定我们在普通用户家目录下/home/lv新建两个普通文 ...

  7. webservice和wcf和web.api简单介绍

    转自:无废话的wcf等等 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下,你有很多的选择来构建一个HTTP Ser ...

  8. MVC学习十三:RouteDebugger插件应用

    1.下载第三方程序集RouteDebugger https://files.cnblogs.com/files/WarBlog/RouteDebugger.rar 2.把RouteDebugger程序 ...

  9. 【luogu P2195 HXY造公园】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2195 fir.吐槽题目(省略1w字 sec.考虑对一个森林的维护,每棵树用并查集维护. 操作1:输出当前查询 ...

  10. 一点一点看JDK源码(四)java.util.ArrayList 中篇

    一点一点看JDK源码(四)java.util.ArrayList 中篇 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 在前篇中 ...