c#实现数据集合转换为csv文本
需求
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#相關技術文章
代碼中使用的反射技巧,直接從我的其他項目中抽取了過來,后續可以專門做個介紹
轉載于:https://www.cnblogs.com/gods/p/3887668.html
總結
以上是生活随笔為你收集整理的c#实现数据集合转换为csv文本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CodeFirst体验之且行且珍惜
- 下一篇: Apache+tomcat+mysql安