C#数据表中的Excel文本到列等效项

时间:2019-01-10 23:23:04

标签: c# excel csv datatable

尽管有关将C# methods文件转换为DataTable的几个CSV在线存在,但似乎没有一个复制Excel - Convert Text to Columns。为了说明我的观点,假设使用以下示例CSV

" FIRst row DATA T"
;;
"Excel versus Csharp" ; ; ; ;
; "MA"; "10000"; "20000"; ; "400000";;; ;; ;;;

"SECOND REPORTING" 
"1"; "20"; ; "";"";"";"";"";"";""; 

一个人期望(quotes 上最好没有双string )会在DataTable中获得:

FIRst row DATA T


Excel versus Csharp
                 MA   10000   20000    40000  ...   

SECOND REPORTING
           1     20 ....

方法

public static DataTable CSVQuoteToDataTable(string   
csvFilePath)
    {
        DataTable csvData = new DataTable();

        try
        {
            string[] seps = { "\";", ";\"" };
            char[] quotes = { '\"', ' ' };
            string[] colFields = null;
            foreach (var line in File.ReadLines(csvFilePath)) % targets unfortunately the 1st row as column of the DataTable
            {
                var fields = line
                    .Split(seps, StringSplitOptions.None)
                    .Select(s => s.Trim(quotes).Replace("\\\"", "\""))
                    .ToArray();

                if (colFields == null)
                {
                    colFields = fields;
                    foreach (string column in colFields)
                    {
                        DataColumn datacolumn = new DataColumn(column);
                        datacolumn.AllowDBNull = true;
                        csvData.Columns.Add(datacolumn);
                    }
                }
                else
                {
                    for (int i = 0; i < fields.Length; i++)
                    {
                        if (fields[i] == "")
                        {
                            fields[i] = null;
                        }
                    }
                    csvData.Rows.Add(fields);
                }
            }
        }

        catch (Exception ex)
        {

        }

       return csvData;
    }

更有效或更有效的方法上的反馈。

谢谢

1 个答案:

答案 0 :(得分:0)

我认为您可以使用Nuget扩展LumenWorksCsvReader来完成大部分所需的工作。它将允许您使用除逗号之外的定界符并处理引号(或者,如果选择,则不行)。

https://www.nuget.org/packages/LumenWorksCsvReader/

我看到的唯一问题是可变的列数,在这种情况下,您可能必须在代码中处理它-确定最大列数并使用它。当您尝试读取范围之外的内容时,该程序包将引发异常,并且看起来很笨拙,您可以为此添加try / catch。

裸露的骨头,但是类似的东西应该可以让您入门。

fdescribe