C#导入导出.CSV文件

举报
Andy阿辉 发表于 2022/02/26 16:47:42 2022/02/26
【摘要】 欢迎您成为我的读者,希望这篇文章能给你一些帮助。 前言大家好,我是阿辉。今天和大家一起来看看,C#在处理流文件时,我们最常用的导出Excel文件是如何操作的。在日常的业务编码过程中,很多时候需求就要求导出Office能打开的表格文件。我们一般的做法是使用Office组件的帮助,或者更优秀一点的是使用NPOI组件来导出(摆脱其Office组件的限制)。但是这两种导出组件都有或多或少的弊端。比如...

欢迎您成为我的读者,希望这篇文章能给你一些帮助。

前言

大家好,我是阿辉。

今天和大家一起来看看,C#在处理流文件时,我们最常用的导出Excel文件是如何操作的。

在日常的业务编码过程中,很多时候需求就要求导出Office能打开的表格文件。我们一般的做法是使用Office组件的帮助,或者更优秀一点的是使用NPOI组件来导出(摆脱其Office组件的限制)。但是这两种导出组件都有或多或少的弊端。

比如NPOI软件,当数据量过大超过60W的时候,在组件内部会出现溢出问题。目前还无解,只能换一个别的组件或者对导出的数据进行限制。

那么我们有没有别的办法能导出Office能打开的文件呢,此时我们的流文件.csv格式就上场了。

.csv是一种逗号分隔值文件格式,其文件已纯文本形式存储表格数据(数字和文本)。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。

它有很多好处,可存储大量数据,耗时少,易操作,可被Office可打开等。

对于目前很多和下位机硬件进行数据交互,在上位机转存的数据一般情况都会是csv文件。

csv格式展示形式

C#导出CSV文件

try
{
   string strBufferLine = "";
   StreamWriter strmWriterObj = new StreamWriter(strFilePath, false, Encoding.UTF8);                
  strmWriterObj.WriteLine(tableheader);                
  for (int i = 0; i < dt.Rows.Count; i++)
  {
      strBufferLine = "";
      for (int j = 0; j < dt.Columns.Count; j++)
      {
          if (j > 0)
              strBufferLine += ",";
          strBufferLine += dt.Rows[i][j].ToString();
      }
      strmWriterObj.WriteLine(strBufferLine);
  }
  strmWriterObj.Close();
  strmWriterObj.Dispose();
  return dt.Rows.Count;
 }
 catch (Exception ex)
 {
     throw new Exception(ex.Message);
 }

C#导入CSV文件

 public static DataTable Csv2Dt(string filePath, int n, DataTable dt)
 {
     try
     {
         var encoding = CommonFileHelper.GetFileEncodeType(filePath);
         StreamReader reader = new StreamReader(filePath, encoding, false);
         int i = 0, m = 0;
         reader.Peek();
         DataRow dr;
         while (reader.Peek() > 0)
         {                                        
             m = m + 1;                    
             string str = reader.ReadLine();
             if (m >= n + 1)
             {
                 string[] split = str.Split(',');
                 dr = dt.NewRow();
                 for (i = 0; i < split.Length; i++)
                 {
                     if (i == 0)
                     {
                         dr[i] = split[i];
                     }                           
                     else
                     {
                         if (string.IsNullOrEmpty(split[i]))
                         {                                    
                             dr[i] = DBNull.Value;
                         }
                         else
                         {
                             dr[i] = Convert.ToDouble(split[i]);
                         }
                     }
                 }
                 dt.Rows.Add(dr);
             }
         }
         reader.Close();
         reader.Dispose();
         return dt;
     }
     catch (Exception ex)
     {                    
         throw new Exception(ex.Message);
     }            
 }

很高兴您能看到这里,希望对你有帮助。

寄语

人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。

原创不易,给个关注。

我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发 谢谢。

很高兴能和您成为朋友。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。