csvhelper一切都写在Excel的一列中

时间:2018-02-06 16:09:35

标签: c# excel csv csvhelper

我正在尝试使用csvhelper来创建我的csv文件,但是我的所有数据都只写在一列中。这是我的代码:

已编辑正如我从评论中所理解的,问题在于excel读取csv文件。我找到了一些解决方案,我可以通过在Excel设置中进行一些更改来解决这个问题,在这种情况下我的问题是:无论如何都要从我的代码中解决这个问题,它不需要在Excel设置中进行任何更改就能够正确读取csv文件?

    public void CreateCSVFile()
    {
        using (var sw = new StreamWriter(@"countrylistoutput.csv"))
        {
            var writer = new CsvWriter(sw);
            using (var dt = ExportToCSV())
            {
                foreach (DataColumn column in dt.Columns)
                {
                    writer.WriteField(column.ColumnName);
                }
                writer.NextRecord();

                foreach (DataRow row in dt.Rows)
                {
                    for (var i = 0; i < dt.Columns.Count; i++)
                    {
                        writer.WriteField(row[i]);
                    }
                    writer.NextRecord();
                }
            }
        }


    }

我不知道我做错了什么,如果有人能帮我解决这个问题,我将不胜感激。

以下是我尝试提供数据的方式:

    public System.Data.DataTable ExportToCSV()
    {
        System.Data.DataTable table = new System.Data.DataTable();
        table.Columns.Add("ID", typeof(int));
        table.Columns.Add("Name", typeof(string));
        table.Columns.Add("Sex", typeof(string));
        table.Columns.Add("Subject1", typeof(int));
        table.Columns.Add("Subject2", typeof(int));
        table.Columns.Add("Subject3", typeof(int));
        table.Columns.Add("Subject4", typeof(int));
        table.Columns.Add("Subject5", typeof(int));
        table.Columns.Add("Subject6", typeof(int));
        table.Rows.Add(1, "Amar", "M", 78, 59, 72, 95, 83, 77);
        table.Rows.Add(2, "Mohit", "M", 76, 65, 85, 87, 72, 90);
        table.Rows.Add(3, "Garima", "F", 77, 73, 83, 64, 86, 63);
        table.Rows.Add(4, "jyoti", "F", 55, 77, 85, 69, 70, 86);
        table.Rows.Add(5, "Avinash", "M", 87, 73, 69, 75, 67, 81);
        table.Rows.Add(6, "Devesh", "M", 92, 87, 78, 73, 75, 72);
        return table;
    }
}

screenshot of the result

由于

2 个答案:

答案 0 :(得分:1)

当Excel不使用逗号作为字段分隔符(它取决于Excel的语言环境)时会发生这种情况。 Excel的解决方案具体是在文件顶部添加一个特殊的sep=,行,位于任何标题上方。例如:

using (var streamWriter = new StreamWriter(outputFilePath))
{
    streamWriter.WriteLine("sep=,"); // make Excel use comma as field separator
    using (var csvWriter = new CsvWriter(streamWriter))
    {
        csvWriter.WriteField("field A");
        csvWriter.WriteField("field B");
        csvWriter.NextRecord();
    }
}

这将解决Excel中的问题,但会导致其他电子表格应用中出现问题。您可以通过使sep=,行以预期格式为条件来支持这两种方式。以下是在Web UI中的外观:
download button with 'csv' and 'csv for excel' options

答案 1 :(得分:0)

您的CSV看上去很可能

a,b,c
d,e,f

您需要做到

"a","b","c"
"d","e","f"

https://stackoverflow.com/a/54027009/9306125