我正在使用CSVHelper从我的datagridview读取和写入CSV文件.

我可以读取CSV文件,但是当我写入它时,它列出了标题和同一行上的行.

如何在EXCEL中将行单独排成一行?

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));

                foreach (Student s in studentBindingSource.DataSource as List<Student>)
                {
                    csvwriter.WriteRecord(s);
                    csvwriter.Flush();
                }
            }

            MessageBox.Show("Data has been saved", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}

如有任何帮助,我们将不胜感激,提前谢谢您.

推荐答案

如果您要手动写入单个记录(WriteRecord而不是WriteRecords),或者手动写入标题(WriteHeader),则需要手动转到下一条记录.

var csvwriter = new CsvWriter(sw, CultureInfo.CurrentCulture);
csvwriter.WriteHeader(typeof(Student));
csvwriter.NextRecord(); // < ---- this

foreach (Student s in studentBindingSource.DataSource as List<Student>)
{
    csvwriter.WriteRecord(s);
    csvwriter.NextRecord(); // < ---- this
}

CSVHelper's documentation page岁时阅读更多.

WriteHeader不会让您前进到下一行.将NextRecord与WriteHeader分开允许您在需要时在标题中写入更多内容.WriteRecord也不会使您前进到下一行,从而使您能够写入多个对象或使用WriteField写入单个字段.


附注,我建议您向csvwriter变量添加一个using块/语句,这样它将自动正确地刷新.

Csharp相关问答推荐

将修剪声明放入LINQ中

需要深入了解NpgSQL DateTimeOffset处理

将列表字符串映射为逗号分隔字符串<>

需要澄清C#的Clean Architecture解决方案模板的AuditableEntityInterceptor类

Polly v8—使用PredicateBuilder重试特定的状态代码

Polly使用泛型重试和重试包装函数

XUNIT是否使用测试数据的源生成器?

只有第一个LINQ.Count()语句有效

C#方法从AJAX调用接收NULL

如何在C#中从正则表达式中匹配一些数字但排除一些常量(也是数字)

C#-VS2022:全局使用和保存时的代码清理

C#普罗米修斯指标

从VS调试器而不是测试资源管理器运行的调试NUnitDotNet测试

当我try 在与XAMP的MySQL服务器连接的ASP.NET核心应用程序中添加迁移时出现错误

如何在使用属性 Select 器时判断是否可以为空

Visual Studio,Docker容器-容器调用:连接被拒绝

为什么我可以在注册表编辑器中更改值,但不能在以管理员身份运行的C#表单应用程序中更改?

当`JToken?`为空时?

RavenDb:为什么在字符串==空的情况下过滤会过滤得太多?

如何在更新数据库实体时忽略特定字段?