当前位置: 首页 > news >正文

c#读取CSV文件跟Excel导入成DataTble

1.读取CSV文件

  /// <summary>/// 读取CSV文件/// </summary>/// <param name="fileName">文件路径</param>public static DataTable ReadCSV(string fileName){DataTable dt = new DataTable();FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);StreamReader sr = new StreamReader(fs, Encoding.UTF8, false);//记录每次读取的一行记录string strLine = null;//记录每行记录中的各字段内容string[] arrayLine = null;//判断,若是第一次,建立表头bool isFirst = true;//列的个数int dtColumns = 0;//逐行读取CSV文件while ((strLine = sr.ReadLine()) != null){strLine = strLine.Trim();//去除头尾空格arrayLine = strLine.Split(',');//分隔字符串,返回数组if (isFirst)  //建立表头{dtColumns = arrayLine.Length;//列的个数for (int i = 0; i < dtColumns; i++){dt.Columns.Add(arrayLine[i]);//每一列名称}isFirst = false;}else   //表内容{DataRow dataRow = dt.NewRow();//新建一行for (int j = 0; j < dtColumns; j++){if (arrayLine.Length > j){dataRow[j] = arrayLine[j];}}dt.Rows.Add(dataRow);//添加一行}}sr.Close();fs.Close();return dt;}

2.Excel导入成DataTble

    /// <summary>/// Excel导入成DataTble/// </summary>/// <param name="file">导入路径(包含文件名与扩展名)</param>/// <returns></returns>public static DataTable ExcelToTable(string file){DataTable dt = new DataTable();IWorkbook workbook;string fileExt = Path.GetExtension(file).ToLower();using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)){if (fileExt == ".xlsx") { workbook = new XSSFWorkbook(fs); } else if (fileExt == ".xls") { workbook = new HSSFWorkbook(fs); } else { workbook = null; }if (workbook == null) { return null; }ISheet sheet = workbook.GetSheetAt(0);//表头  IRow header = sheet.GetRow(sheet.FirstRowNum);List<int> columns = new List<int>();for (int i = 0; i < header.LastCellNum; i++){object obj = GetValueType(header.GetCell(i));if (obj == null || obj.ToString() == string.Empty){dt.Columns.Add(new DataColumn("Columns" + i.ToString()));}elsedt.Columns.Add(new DataColumn(obj.ToString()));columns.Add(i);}//数据  for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++){DataRow dr = dt.NewRow();bool hasValue = false;foreach (int j in columns){dr[j] = GetValueType(sheet.GetRow(i).GetCell(j));if (dr[j] != null && dr[j].ToString() != string.Empty){hasValue = true;}}if (hasValue){dt.Rows.Add(dr);}}}return dt;}/// <summary>/// 获取单元格类型/// </summary>/// <param name="cell">目标单元格</param>/// <returns></returns>private static object GetValueType(ICell cell){if (cell == null)return null;switch (cell.CellType){case CellType.Blank:return null;case CellType.Boolean:return cell.BooleanCellValue;case CellType.Numeric:return cell.NumericCellValue;case CellType.String:return cell.StringCellValue;case CellType.Error:return cell.ErrorCellValue;case CellType.Formula:default:return "=" + cell.CellFormula;}}
http://www.lryc.cn/news/260515.html

相关文章:

  • Python编程技巧 – 单字符函数
  • xcode-文件
  • 云原生之深入解析网络服务Istio、eBPF和RSocket Broker
  • 文件系统和磁盘调度
  • C++ stringOJ练习题
  • 解决问题:ImportError: cannot import name ‘_update_worker_pids‘
  • 【面试总结】Java面试题目总结(一)
  • 大白话数据中台,何为数据中台
  • escapeshellarg参数绕过和注入的问题
  • CSS——标准流、浮动、Flex布局
  • P21 类神经网络训练不起来怎么办- 自动调整学习率 Adapative learning rate
  • [Linformer]论文实现:Linformer: Self-Attention with Linear Complexity
  • 【Jeecg Boot 3 - 第二天】1.1、后端 docker-compose 部署 JEECGBOOT3
  • Centos单用户模式修改root密码
  • [Unity]关于Unity接入Appsflyer并且打点支付
  • AICore 带来了 Android 专属的 AI 能力,它要解决什么?采用什么架构思路?
  • python学习1
  • 【SpringBoot】Spring Boot 单体应用升级 Spring Cloud 微服务
  • el-tree搜索的使用
  • Java使用Microsoft Entra微软 SSO 认证接入
  • “华为杯”研究生数学建模竞赛2016年-【华为杯】A题:无人机在抢险救灾中的优化运用(附获奖论文及MATLAB代码实现)
  • 17--异常处理
  • 数据结构 | c++编程实现求二叉树的叶节点的个数。(递归非递归)
  • python读取csv文件
  • 租一台服务器多少钱决定服务器的价格因素有哪些
  • 深度学习(生成式模型)——ADM:Diffusion Models Beat GANs on Image Synthesis
  • Ubuntu无法解析域名DNS指向127.0.0.53问题处理
  • Intewell-Hyper I_V2.0.0_release版本正式发布
  • Mysql mybatis 语法示例
  • 第77讲:二进制方式搭建MySQL数据库5.7版本以及错误日志管理