如何在程序中列出Excel表的列名?

解决方案 »

  1.   

    OLEDB连接excel,然后select * from sheet1 where 1=0,把结果装到DataSet 中,然后循环取DataTable的column,column的name就是列名
      

  2.   


     public IList<string> GetColumnsBySheet(string MyFullFileName, string MySheetName)
            {
                try
                {
                    IList<String> fields = new List<String>();
                    DataTable dt = GetSheetData(MyFullFileName,MySheetName);
                    foreach (DataColumn dc in dt.Columns)
                    {
                        fields.Add(dc.ColumnName);
                    }
                    fields.Insert(0, "Not In My File");
                    return fields;
                }
                catch (System.Exception ex)
                {
                    throw ex;
                }
            }       protected DataTable GetSheetData(string MyFullFileName,string MySheetName)
            {
                try
                {
                    return GetSheetData(MyFullFileName,"select top 0 * from [" + MySheetName + "]");
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }     protected DataTable GetSheetData(string MyFullFileName,string CmdString)
            {
                DataTable dt = null;
                OleDbConnection conn = new OleDbConnection();
                try
                {
                    conn.ConnectionString = GetConnection(FullFileName);
                    conn.Open();
                    OleDbDataAdapter adp = new OleDbDataAdapter(CmdString, conn);
                    DataSet ds = new DataSet();
                    adp.Fill(ds);
                    dt = ds.Tables[0];
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    conn.Close();
                }
                return dt;
            } protected string GetConnection(string MyFullFileName)
            {
                string cnn = string.Empty;
                switch (UpLoadFileType)
                { 
                    case FileType.Access:
                        cnn= "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MyFullFileName;
                        break;
                    case FileType.Excel:
                        cnn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MyFullFileName + "; Extended Properties=Excel 8.0";
                        break;
                    case FileType.Text:
                        cnn = @"Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + System.IO.Directory.GetParent(MyFullFileName).FullName + @";Extended Properties=""text;HDR=Yes;FMT=Delimited""";
                        break;
                    default:
                        throw new Exception("FileType is Wrong!");
                }
                return cnn;
            }
      

  3.   

    小改一下就行,把第三个方法改为protected string GetConnection(string MyFullFileName)
            {
              return "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MyFullFileName + "; Extended Properties=Excel 8.0";
            }