C#导入导出.CSV文件

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

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

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

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

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

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

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

csv格式展示形式

C#导入导出.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);
     }            
 }

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