日期:2014-05-17  浏览次数:20788 次

c# excel sheet 获取问题(高手进)

有N个excel 循环处理。
第一个excel 11列 其他所有excel 12列 列名一样
循环第一次 select * from sheet1$ 11列
第二次循环 select * from sheet1$ 填充到dataset里面 还是11列。 如果不要第一次循环 就能得到12列。很是郁闷,很急

为什么 excel 中有12列 确select 得到11列。

C# code
foreach (string FilePath in strFiles)
                {

 OleDbConnection dbcon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FilePath + ";Extended Properties=Excel 8.0");
            try
            {
                if (dbcon.State == ConnectionState.Closed)
                {
                    dbcon.Open();
                }
                for (int i = 0; i < TableList.Count; i++)
                {
                    string dtname = TableList[i].ToString();
                    try
                    {
                        OleDbCommand cmd = new OleDbCommand("select * from [" + dtname + "$]", dbcon);
                        OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
                        table = new DataTable(dtname);
                        adapter.Fill(table);
                        ds.Tables.Add(table);
                    }
                    catch (Exception exp)
                    {
                        MessageBox.Show(exp.Message);
                    }
                }
            }
            finally
            {
                if (dbcon.State == ConnectionState.Open)
                {
                    dbcon.Close();
                }
            }
}


------解决方案--------------------
for (int i = 0; i < TableList.Count; i++)


TableList怎么来的?

sheet名称一般是从1开始
试试
for (int i = 1; i <= TableList.Count; i++)

------解决方案--------------------
楼主的问题看不明白啊,你自己说的:
第一个excel 11列 其他所有excel 12列 列名一样
那么你从两个循环取第一个excel都是11列了,没错啊?另外你看看excel中是否有隐藏的列呢?