//http://www.cnblogs.com/mingmingruyuedlut/archive/2013/01/20/2849906.html
C# 将List中的数据导入csv文件中
将数据保存至文件中,是一个比较常用的功能,数据源可以是多种形式,文件也可以是多种。
这里简单的介绍将List数据导入到CSV文件中的方法。
代码如下所示:
Student类:
public class Student { private string id; public string Id { get { return id; } set { id = value; } } private string name; public string Name { get { return name; } set { name = value; } } private string age; public string Age { get { return age; } set { age = value; } } }
模拟一个简单的List数据源:
private List<Student> GetStudentData() { List<Student> studentList = new List<Student>(); Student s1 = new Student(); s1.Id = "1"; s1.Name = "haha"; s1.Age = "10"; Student s2 = new Student(); s2.Id = "2"; s2.Name = "xixi"; s2.Age = "20"; Student s3 = new Student(); s3.Id = "3"; s3.Name = "lolo"; s3.Age = "30"; studentList.Add(s1); studentList.Add(s2); studentList.Add(s3); return studentList; }
根据文件路径创建相应的文件:
/// <summary> /// Create target file /// </summary> /// <param name="folder">folder</param> /// <param name="fileName">folder name</param> /// <param name="fileExtension">file extension</param> /// <returns>file path</returns> private string CreateFile(string folder, string fileName, string fileExtension) { FileStream fs = null; string filePath = folder + fileName + "." + fileExtension; try { if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } fs = File.Create(filePath); } catch (Exception ex) { } finally { if (fs != null) { fs.Dispose(); } } return filePath; }
获取类的属性集合(以便生成CSV文件的所有Column标题):
private PropertyInfo[] GetPropertyInfoArray() { PropertyInfo[] props = null; try { Type type = typeof(EricSunApp.Student); object obj = Activator.CreateInstance(type); props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); } catch (Exception ex) { } return props; }
对List进行遍历,将数据导入CSV文件中(宗旨就是在一行数据中以逗号进行分割):
/// <summary> /// Save the List data to CSV file /// </summary> /// <param name="studentList">data source</param> /// <param name="filePath">file path</param> /// <returns>success flag</returns> private bool SaveDataToCSVFile(List<Student> studentList, string filePath) { bool successFlag = true; StringBuilder strColumn = new StringBuilder(); StringBuilder strValue = new StringBuilder(); StreamWriter sw = null; PropertyInfo[] props = GetPropertyInfoArray(); try { sw = new StreamWriter(filePath); for(int i = 0; i < props.Length; i++) { strColumn.Append(props[i].Name); strColumn.Append(","); } strColumn.Remove(strColumn.Length - 1, 1); sw.WriteLine(strColumn); //write the column name for(int i = 0; i < studentList.Count; i++) { strValue.Remove(0, strValue.Length); //clear the temp row value strValue.Append(studentList[i].Id); strValue.Append(","); strValue.Append(studentList[i].Name); strValue.Append(","); strValue.Append(studentList[i].Age); sw.WriteLine(strValue); //write the row value } } catch(Exception ex) { successFlag = false; } finally { if (sw != null) { sw.Dispose(); } } return successFlag; }
简单例举具体的调用:
private bool EricSunExportData(string folder, string fileName, string fileExtension) { List<Student> studentList = GetStudentData(); string filePath = CreateFile(folder, fileName, fileExtension); bool flag = SaveDataToCSVFile(studentList, filePath); return flag; }