欢迎您成为我的读者,希望这篇文章能给你一些帮助。
前言
大家好,我是阿辉。
今天和大家一起来看看,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);} }
很高兴您能看到这里,希望对你有帮助。
寄语
人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。
原创不易,给个关注。
我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发 谢谢。
很高兴能和您成为朋友。
推荐阅读
分享给同做程序员的你我他
毕业四年,我当初是如何走上编程这条路的!
物联网工程专业的迷茫与抉择