Как исключить заголовок при записи данных в CSV - PullRequest
0 голосов
/ 25 марта 2019

Я записываю свои данные из public class в файл CSV.Поскольку я хочу добавить свои данные, я хочу исключить импорт заголовка и импортировать только данные из класса.Мой код ниже импортирует как заголовки, так и данные.Надеюсь получить помощь.Благодарю.

Record.cs - мой класс

public class Record
{
    public string Name
    {
        get; set;
    }

    public DateTime DateOfBirth
    {
        get; set;
    }
}

Form1.cs - моя форма

public partial class Form1 : Form
{
    private List<Record> records;

    public Form1()
    {
        InitializeComponent();
        records = new List<Record>();
    }

    private void Savetocsv_Click(object sender, EventArgs e)
    {
        var myDocument = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        using (var writer = new StreamWriter(myDocument + "/my-data.csv", append: true))
        {
            using (var csv = new CsvWriter(writer))
            {
                csv.WriteRecords(records);
            }                
        }
    }

Ответы [ 4 ]

2 голосов
/ 25 марта 2019

Используя Configuration, вы можете использовать свойство HasHeaderRecord:

HasHeaderRecord: Получает или задает значение, указывающее, имеет ли файл CSV запись заголовка.
По умолчанию установлено значение true.

var records = new List<Foo>
{
    new Foo { Id = 1, Name = "one" },
    new Foo { Id = 1, Name = "one" },
};

using (var writer = new StreamWriter($"file.csv"))
using (var csv = new CsvWriter(writer, new Configuration { HasHeaderRecord = false }))
{
    csv.WriteRecords(records);
}

Файл результата: "file.csv"

1; один
1; один

Или просто зациклите записи и напишите их:

var records = new List<Foo>
{
    new Foo { Id = 1, Name = "one" },
    new Foo { Id = 1, Name = "one" }
};

using (var writer = new StreamWriter($"file.csv"))
using (var csv = new CsvWriter(writer))
{
    foreach (var record in records)
    {
        csv.WriteRecord(record);
        csv.NextRecord();
    }
}
1 голос
/ 25 марта 2019

Измените способ записи следующим образом, а затем CsvHelper.WriterConfiguration сделайте свое дело (примечание HasHeaderRecord ):

private void Savetocsv_Click(object sender, EventArgs e)
{
    var myDocument = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    using (var writer = new StreamWriter(myDocument + "/my-data.csv", append: true))
    {
        using (var csv = new CsvWriter(writer, new Configuration { HasHeaderRecord = false }))
        {
            csv.WriteRecords(records);
        }                
    }
}
0 голосов
/ 25 марта 2019

Я не знаю, какой CsvWriter вы используете, но один здесь имеет свойство HasHeaderRecord, которое вы можете использовать, чтобы игнорировать или включать заголовки.

private void Savetocsv_Click(object sender, EventArgs e)
{
    var myDocument = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    using (var writer = new StreamWriter(myDocument + "/my-data.csv", append: true))
    {
        using (var csv = new CsvWriter(writer))
        {
            csv.Configuration.HasHeaderRecord = true;
            csv.WriteRecords(records);
        }               
    }
} 
0 голосов
/ 25 марта 2019

Удалить первую строку из records перед вызовом:

csv.WriteRecords(records);

(Если вам нужно оставить записи без изменений, добавьте заголовки обратно после вызова WriteRecords (...).)

private void Savetocsv_Click(object sender, EventArgs e)
{
    var myDocument = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    using (var writer = new StreamWriter(myDocument + "/my-data.csv", append: true))
    {
        using (var csv = new CsvWriter(writer))
        {
            records.RemoveAt(0);  // Removes the header row.
            csv.WriteRecords(records);
        }                
    }
}
...