我使用CSVHelper编写了使用MySqlDataReader获取的列表<>。我的问题是与格式化我的CSV文件正确,我创建了一个映射器类,应该规定凡列名其中放置数据:CSVHelper未格式化CSV
public ReaderMap()
{
Map(m => m.accountpersonfirstname).Name("E-mail Address");
Map(m => m.accountpersonlastname).Name("First Name");
Map(m => m.emailaddress).Name("Last Name");
}
这直接从http://joshclose.github.io/CsvHelper/#mapping-name来。
我打算假设我的问题在于我的Streamwriter如何写入我现有的csv,因为它每次都会创建一个新的CSV文件(并且我放弃了我的名字),但是我也试过使用按索引进行映射,它应该可以在新的CSV文件上工作,但它仍然会将数据放在彼此相邻的位置我希望我的列分开几列,以便数据可读 - 我还需要标头名称。
这里是我的两个类 - 映射器和原始数据类。
class Reader
{
public string emailaddress { get; set; }
public string accountpersonfirstname { get; set; }
public string accountpersonlastname { get; set; }
}
class ReaderMap : CsvClassMap<Reader>
{
public ReaderMap()
{
Map(m => m.accountpersonfirstname).Name("E-mail Address");
Map(m => m.accountpersonlastname).Name("First Name");
Map(m => m.emailaddress).Name("Last Name");
}
}
我也要去贴我的代码部分,因为像我上面提到的,也许我没有正确地使用流作家(虽然我认为我是)。
MySqlCommand cmd = new MySqlCommand(sqlCmd, cn);
cmd.CommandType = CommandType.Text;
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Reader dataExport = new Reader();
dataExport.accountpersonfirstname = rdr.GetString(0);
dataExport.accountpersonlastname = rdr.GetString(1);
dataExport.emailaddress = rdr.GetString(2);
dataList.Add(dataExport);
}
var textWriter = new StreamWriter(filePath);
var csv = new CsvWriter(textWriter);
csv.Configuration.RegisterClassMap<ReaderMap>();
foreach (var item in dataList)
{
csv.WriteRecord(item);
}
也许这个问题是我的StreamWriter开始在上述范围内或者也许这一切又回到使用数据读取器 - 我不能完全肯定。我希望有人能为我阐明这一点。
编辑:
似乎使用下面的允许它正确地追加。然而,我的原始问题仍然存在的事实是,当我将csv文件中的头名和姓氏进一步移动到F和G列时,它仍将它们放在B和C处,好像它完全忽略了我设置的类和配置。
var textWriter = new StreamWriter(filePath, true);
我建议你试试FileHelpers库。导出到Csv可以在几行代码中完成。 – Turo