我正在使用CSVHelper来编写List<>我通过使用MySqlDataReader获得的。我的问题是正确格式化我的CSV文件,我创建了一个mapper类,它应该指定按列名放置数据的位置:
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。
我将假设我的问题在于我的编写者如何写入我现有的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);
}
也许这个问题是我在上面的编写器中启动的,或者这一切都可以追溯到使用数据读取器 - 我不完全确定。我希望有人可以为我阐明这一点。
修改
似乎使用以下内容允许它正确追加。然而,我的原始问题仍然存在,当我将csv文件中的标题firstname和lastname进一步移动到F和G列时,它仍然将它们放在B和C,好像它完全忽略了我设置的类和配置。
var textWriter = new StreamWriter(filePath, true);
答案 0 :(得分:1)
When using the a custom <Command PackageFile="en/empty.vbs" Arguments='' >
, the output is written in a Property per Column fashion without gaps unless a Property is ignored, in which case, the property is not output, but a gap is not created where it is ignored.
In order to create the gaps that you desire, you would need to create a custom method that writes out the file in the format you would desire.
CsvClassMap
Having said all that, why are you trying to insert gaps? Inserting gaps doesn't make a csv more readable, and if you are opening it in excel or some other spreadsheet app, double click on the right header border and it will auto expand the column width.