You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:12:07