我使用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