读取以逗号分隔和回车符的 Excel 数据



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

ID  Name     Code        
1   Mark     ABC001
2   Ryan     BBC001 
3   Will     CBC001

当有逗号分隔 (ID) 和 (回车符 - 代码 - 第 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 中的列类型格式化为文本(而不是常规),然后使用 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..  
   }

最新更新