c#实现数据集合转换为csv文本
2014-03-21 00:54
423 查看
需求
1、将一个数据集合导出到一个csv文件中,集合类型可以视为 List<T>,T为任意类型,T包含多个属性,可指定部分属性进行导出2、软件中有多种不同类型的数据类型需要进行导出
需求很简单,简单分析下
1、csv格式就是文本格式,包含多行数据,每行包含多列文字,文字间已Tab标记分隔(简单,无需过多考虑)
2、针对数据类型T可以是任意类型,
3、支持指定属性导出,同一个类型也允许指定不同的属性组分别导出
4、属性与最终生成的文件中的列 一一对应,每个属性可以设置对应的列名称
初步构想解决方案
1、指定需要导出的属性名称,通过反射获取对象的属性值2、拼接为csv文本字符串
3、提供属性名称与列名称的一一对应关系
4、使用一个简单的导出csv工具类型,仅一个一个静态方法,接受List<T>类型数据集合,以List<Piar>方式传入ColumnName与PropertyName的键值对
5、写入某指定的csv文件
实际编码
开发过程适当合理更改,如将文件写入逻辑移除(文件写入逻辑应在上层进行),保持导出逻辑简单,形成如下代码调用方法
假设类型定义如下public class User { public string Name { get;set; } public string Info { get;set; } }
若存在一个用户列表List<User> Users{get;set;}
则生成csv格式字符串的代码如下
public string GenerateUserExportText() { return ExportCsvUtility.GenerateExportText(Usrs, new List<KeyValuePair<string, string>>() { new KeyValuePair<string, string>("用户名", "Name"), new KeyValuePair<string, string>("用户信息", "Info"), }); }
上层使用的选择保存文件 及 写入文件的方法可以参照我提供的下列代码:
注意StreamWriter的构造方法中,需传入参数设置Unicode编码,否则Excel打开csv文件会有问题
private bool TryGetOutFilePath(out string filePath) { SaveFileDialog saveFileDialog = new SaveFileDialog() { FileName = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss"), DefaultExt = ".text", Filter = "csv documents (.csv)|*.csv", }; if (saveFileDialog.ShowDialog() == true) { filePath = saveFileDialog.FileName; return true; } filePath = string.Empty; return false; } private void ExportToFile(string filePath, string fullText) { try { using (FileStream outFileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { using (TextWriter textWriter = new StreamWriter(outFileStream, Encoding.Unicode)) { textWriter.Write(fullText); } } } catch (Exception e) { ExceptionHandler.HandleException(e); } }
后续Ant会带来更多c#相关技术文章
代码中使用的反射技巧,直接从我的其他项目中抽取了过来,后续可以专门做个介绍
相关文章推荐
- C#调试入门篇
- C#动态加载树菜单
- C# 继承
- 【C#】结对项目开发-电梯调度仿真系统(Bata版)(党云龙、黄为)
- C# 读取excel 文件的方法
- C#给线程传递参数有3种方式
- C# 类与结构的区别
- c# 学习笔记
- C# WaitHandle 使用教程
- System.Diagnostics.Process.Start的用法(C#)
- C#-设置label的字体颜色和大小
- C# WinForm程序退出的方法
- C#-datagridview设置列宽
- C#-datagridview隐藏行头
- 对C#中Thread.IsBackground属性的理解
- C#虚方法
- 《深入理解C#》学习笔记之第一章
- C#-创建自定义双击事件
- C#之属性总结
- C# Winform 怎么让按钮在Panel里居中显示