使用CSVHelper写入CSV时表头与数据行同排,如何实现Excel中行分离?
解决CSVHelper写入CSV时表头与数据行同列问题
问题核心是**WriteHeader方法仅输出表头内容,不会自动添加换行符;WriteRecord也不会在每条记录后自动换行**,导致表头和第一条数据挤在同一行。
修复方案:
- 在调用
WriteHeader后,执行csvwriter.NextRecord();手动写入换行,将光标移至下一行 - 移除循环内的
csvwriter.Flush();,StreamWriter和CsvWriter在using块结束时会自动处理缓冲区刷新,频繁调用会降低性能
优化后的代码:
private void btnWrite_Click(object sender, EventArgs e) { using (SaveFileDialog sfd = new SaveFileDialog() { Filter = "CSV|*.csv", ValidateNames = true }) { if (sfd.ShowDialog() == DialogResult.OK) { using (var sw = new StreamWriter(sfd.FileName)) { var csvwriter = new CsvWriter(sw, CultureInfo.CurrentCulture); // 写入表头后换行 csvwriter.WriteHeader(typeof(Student)); csvwriter.NextRecord(); foreach (Student s in studentBindingSource.DataSource as List<Student>) { csvwriter.WriteRecord(s); // 每条记录后换行 csvwriter.NextRecord(); } } MessageBox.Show("Data has been saved", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }
更简洁的批量写入方式:
如果数据源是集合,可直接使用WriteRecords方法,它会自动处理记录间的换行:
// 替换循环部分 var students = studentBindingSource.DataSource as List<Student>; csvwriter.WriteHeader(typeof(Student)); csvwriter.NextRecord(); csvwriter.WriteRecords(students);
内容的提问来源于stack exchange,提问作者Kristen Sareen-Kadach
相关产品推荐
相关产品推荐

