FileHelpers: CsvEngine.DataTableToCsv создает недопустимый CSV - PullRequest
0 голосов
/ 16 ноября 2011

Я использую 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, ',');

    }

Есть идеи?

1 Ответ

0 голосов
/ 23 декабря 2011

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

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

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