C# 使用逗号分隔和回车符读取Excel数据

C# 使用逗号分隔和回车符读取Excel数据,c#,winforms,excel,c#-4.0,C#,Winforms,Excel,C# 4.0,如果excel(.xls、.xlsx类型文件)的Sheet1是这种格式,并且当我使用ReadExcel时,我能够将excel中显示的数据绑定到网格 ID Name Code 1 Mark ABC001 2 Ryan BBC001 3 Will CBC001 当有逗号分隔(ID)和\n(回车-代码-第2行)的数据时,我不会得到所有三行,而是得到第1行和第3行 ID Name Code 1

如果excel(.xls、.xlsx类型文件)的Sheet1是这种格式,并且当我使用ReadExcel时,我能够将excel中显示的数据绑定到网格

ID  Name     Code        

1   Mark     ABC001

2   Ryan     BBC001 

3   Will     CBC001
当有逗号分隔(ID)和\n(回车-代码-第2行)的数据时,我不会得到所有三行,而是得到第1行和第3行

ID      Name      Code        

1       Mark      ABC001

2,5     Ryan,John BBC001 
                DBC001

3       Will      CBC001
下面是方法调用:

private void ReadExcel(string filePath)
{
            DataTable table = new DataTable();
            table.Columns.Add("ID", typeof(string));
            table.Columns.Add("Name", typeof(string));
            table.Columns.Add("Code", typeof(string));


            string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text\"", filePath);
            using (OleDbConnection dbConn = new OleDbConnection(connString))
            {
                using (OleDbCommand cmd = new OleDbCommand(@"SELECT * FROM [Sheet1$]", dbConn))
                {
                    dbConn.Open();
                    using (OleDbDataReader reader = cmd.ExecuteReader())
                    {
                        DataRow row;
                        while (reader.Read())
                        {
                            row = table.NewRow();
                            row["ID"] = (string)reader[0];
                            row["Name"] = (string)reader[1];
                            row["Code"] = (string)reader[2];
                            table.Rows.Add(row);
                        }
                    }
                }
            }
        }
有没有想过处理这个问题,这样我就可以像这样拿回数据

ID      Name      Code        

1       Mark      ABC001

2       Ryan      BBC001

5     John      DBC001

3       Will      CBC001

我做的第一个更改是将excel中的列类型格式化为text(而不是general),然后使用split命令创建新行,这样就可以了

  string[] Codes = reader["Code"].ToString().Trim().Split('\n');
  string[] IDs = reader["ID"].ToString().Trim().Split(',');



   for (int i = 0; i <= Codes.Count() - 1; i++)
   {
     //table.rows.add one by one..  
   }
string[]code=reader[“code”].ToString().Trim().Split('\n');
string[]IDs=reader[“ID”].ToString().Trim().Split(',');

对于(int i=0;i)这是一个.xlsx文件或.txt/.csv??table.Load(reader)来代替while循环?任何有效的解决方案都是好的。尽管我仍然认为您的文件必须是csv伪装成XLS,因为如果文件是XSL,单元格中包含的数据和逗号都不应该丢弃它。