使用C#识别并加载Excel中的行分组

时间:2016-09-06 04:26:06

标签: c# excel

我有一个大约有5万行的Excel文件。我正在使用以下连接字符串

来阅读它
string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR=No;IMEX=1'", MyFilePath);

在这个巨大的Excel文件中,行以嵌套模式分组。意思是,假设前500行分组在Group A下,该组中有一个子组,包含300-400行Group B,然后再从350-400开始 在Group C。现在,当我在程序中读取excel文件时,我得到了所有行,但我无法区分上面提到的行分组。有没有明智的方法来识别和分组它们?

这是我的代码示例。

rivate List<List<string>> ReadSheetData(string _query, bool _HasHeaders = true)
    {
        string conn = "";
        if (!_HasHeaders)
            conn = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR=No;IMEX=1'", MyFilePath);
        else
            conn = this.conn;

        List<List<string>> ret = new List<List<string>>();
        using (OleDbConnection connection = new OleDbConnection(conn))
        {
            connection.Open();
            try
            {
                OleDbCommand command = new OleDbCommand(_query, connection);
                using (OleDbDataReader dr = command.ExecuteReader())
                {
                    DataTable tbl = dr.GetSchemaTable();
                    while (dr.Read())
                    {
                        List<string> rowVals = new List<string>();
                        ret.Add(rowVals);
                        for (int i = 0; i < dr.FieldCount; i++)
                        {
                            dynamic cell = dr[i];
                            string value = cell != null ? cell.ToString() : "";
                            rowVals.Add(value);
                        }
                    }
                }
            }
            catch (Exception ex)
            { }
        }

        ret.RemoveAll(a => a.All(b => b == "") == true);
        return ret;
    }

0 个答案:

没有答案