FileHelpers: CsvEngine.DataTableToCsv创建无效的CSV

本文关键字:无效 CSV 创建 DataTableToCsv CsvEngine FileHelpers | 更新日期: 2023-09-27 18:14:42

我使用FileHelpers从我的应用程序导出动态创建的数据。我有一个DataGridView,其列和行可以由用户编辑(添加,删除,操纵),所以我不知道什么数据最终传递给FileHelpers。

阅读动态创建一个CSV文件与FileHelpers指向我的CsvEngine。DataTableToCsv方法。不幸的是,此方法既不转义包含分隔符的字段,也不转义双引号和换行符。

如果我有一个预定义的类,我可以使用fieldquotes - annotation使FileHelper使用适当的格式,但由于情况并非如此,我不知道如何归档动态创建的数据。

//Edit: Some code/Current approach:

    /// <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, ',');
    }

任何想法?

FileHelpers: CsvEngine.DataTableToCsv创建无效的CSV

当你不能使用预定义的类时,FileHelpers就不那么强大了。

然而,由于您在从DataGridView转换时访问每个值,为什么不在那里处理转义呢?

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