excel 列名
大家好!请高手帮个忙!
    现在情况是这样的:
    有一个上传文件的控件,点击浏览可以选择上传的文件,点击上传可以把选择的文件上传到指定的文件夹,同时把excel的列名显示在listbox里,目前基本功能已经实现,代码如下:
上传:
if(fileup.PostedFile !=null)
{
  string fileName=fileup.PostedFile.FileName ;  
  string sheetName="sheet1";  
  DataSet ds = ExcelToDS(fileName,sheetName);  
  foreach(DataColumn c in ds.Tables[0].Columns)
   {
     ListItem item = new ListItem(c.ColumnName, c.ColumnName);
     ListBox1.Items.Add(item);
   }
}
有个函数:
public DataSet ExcelToDS(string filePath,string sheetName)  
{  
  string strConn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+filePath+";Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";
  OleDbConnection myConn=new OleDbConnection(strConn);  
  OleDbDataAdapter myDa=new OleDbDataAdapter("select * from ["+sheetName+"$]",myConn);  
  DataSet ds=new DataSet();  
  DataTable dt=new DataTable();
  myDa.Fill(dt);
  myDa.Fill(ds) ;  
  myConn.Close();
  return ds;  
}
存在这样一个问题,一个excel文件可能包括很多表,表的名字也不一定都是默认的sheet1... ,现在的代码只能显示sheet1表的字段,怎么改一下可以把所有表的字段都显示出来?
------解决方案--------------------Dictionary<string, DataTable> dicEccelDate = new Dictionary<string,DataTable>();
OleDbConnection myConn=new OleDbConnection(strConn);  
myConn.Open();
DataTable dtSheet = objMyOleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });//读Excel Sheet
               if (dtSheet != null && dtSheet.Rows.Count > 0)
               {
                   for (int i = 0; i < dtSheet.Rows.Count; i++)
                   {
                       objMyDataSet = new DataSet();
                       strSheetName = dtSheet.Rows[i]["TABLE_NAME"].ToString();
                       OleDbDataAdapter objMyDataAdapter = new OleDbDataAdapter("SELECT * FROM [" + strSheetName + "]", objMyOleDbConnection);
                       objMyDataAdapter.Fill(objMyDataSet, "MyData");
                       dicEccelDate.Add(strSheetName, objMyDataSet.Tables[0]);
                   }
                   objMyOleDbConnection.Close();
               }
 return dicEccelDate;
这样就可以读出全部的 Sheet了
------解决方案--------------------C# code
/// <summary>
        /// 从Excel中获取数据.(无须指定表名,返回的DataSet包含此Excel中所有的表).
        /// </summary>
        /// <param name="filePath">Excel物理路径.</param>
        /// <returns>DataSet:Excel中表的记录集合.</returns>
        public DataSet ReadExcle(string filePath, out string msg)
        {
            string strSql = string.Empty;
            msg = string.Empty;
            DataSet ds = new DataSet();
            DataTable dt = null;
            OleDbDataAdapter adapter=null;
            string strTableName = string.Empty;
            if (filePath != string.Empty)
            {
                try
                {
                    //判断是否为Xls文件.
                    if (!filePath.Substring(filePath.Length - 3, 3).Equals("xls"))
                    {
                        throw new Exception(ImportConst.ErrorMessage_NoExcelFile);
                    }
                    OleDbConnection conn = new OleDbConnection(string.Format(strConnectionString, filePath));
                    conn.Open();
                    //获取XML文件Schema信息.
                    DataTable dtschema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    if (dtschema != null && dtschema.Rows.Count > 0)