FileHelpers: CsvEngine.DataTableToCsv создает недопустимый CSV

Я использую FileHelpers для экспорта динамически созданных данных из моего приложения. У меня есть DataGridView, чьи столбцы и строки могут редактироваться пользователями (добавлять, удалять, манипулировать), поэтому я понятия не имею, какие данные в конечном итоге передаются в FileHelpers.

Чтение Динамическое создание файла CSV с помощью FileHelpers указало мне к методу CsvEngine.DataTableToCsv. К сожалению, этот метод не экранирует ни поля, содержащие разделитель, ни двойные кавычки, ни символы новой строки.

Если бы у меня был предопределенный класс, я мог бы использовать аннотацию FieldQuoted-Annotation, чтобы заставить FileHelper использовать правильный формат, но, поскольку это не так, я не знаю, как архивировать это с динамически созданными данными.

//Редактировать: Некоторый код / ​​Текущий подход:

    /// <summary>
    /// Converts the Data in a DGV into a DataTable.
    /// </summary>
    /// <param name="dataGridView"></param>
    /// <returns></returns>
    public static DataTable GetDataTableFromDGV(DataGridView dgv)
    {
        DataTable myDT = new DataTable();
        // add Columns
        foreach (DataGridViewColumn col in dgv.Columns)
        {
            myDT.Columns.Add(col.Name);
        };

        // add Rows
        foreach (DataGridViewRow row in dgv.Rows)
        {
            List<Object> line = new List<object>();
            foreach (DataGridViewCell cell in row.Cells)
            {
                line.Add(cell.Value);
            }
            myDT.Rows.Add(line.ToArray<Object>());
        }
        return myDT;
    }

    public void main(){

        String filename = "test.csv"
        DataTable dt = GetDataTableFromDGV(this.dgv);
        CsvEngine.DataTableToCsv(dt, filename, ',');

    }

Любые идеи?


person Hirnhamster    schedule 16.11.2011    source источник


Ответы (1)


FileHelpers не так эффективен, если вы не можете использовать предопределенный класс.

Однако, поскольку вы посещаете каждое значение при конвертации из вашего DataGridView, почему бы не обработать ваш экран там?

foreach (DataGridViewCell cell in row.Cells)
{
    line.Add(AddDoubleQuotesAndEscapeIfNecessary(cell.Value));
}
person shamp00    schedule 23.12.2011