首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

excel 列名,该如何处理

2012-01-26 
excel 列名大家好!请高手帮个忙!现在情况是这样的:有一个上传文件的控件,点击浏览可以选择上传的文件,点击

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)                    {                        //遍历Excel中所有的表                        foreach (DataRow row in dtschema.Rows)                        {                            strTableName = row[2].ToString().Trim(new char[] { '\'' });                            if (IsTable(strTableName))                            {                                dt = new DataTable(strTableName.Replace('$',' '));                                strSql = string.Format("select * from [{0}]", strTableName);                                adapter = new OleDbDataAdapter(strSql, conn);                                adapter.Fill(dt);                                ds.Tables.Add(dt);                            }                        }                    }                    conn.Close();                }                catch (Exception Ex)                {                    msg += Ex.Message + "$";                }            }            else            {                msg += ImportConst.ErrorMessage_NullPath + "$";            }            return ds;        }        /// <summary>        /// 判定是否为Excel中包含记录的表.(排除掉打印区域等表格.e.g xx$print Area)        /// </summary>        /// <param name="tableName">Excel中获取到的表名.</param>        /// <returns></returns>        protected bool IsTable(string tableName)        {            bool blIsTable = false;            if (tableName != string.Empty)            {                int nIndex = tableName.LastIndexOf("$");                if (nIndex!=-1&&tableName.Length-1==nIndex)                {                    blIsTable = true;                }            }            return blIsTable;        } 

热点排行