項目中經(jīng)常會用到把Excel的文件內(nèi)容導(dǎo)入到數(shù)據(jù)庫中的,剛剛花了點時間,做了個例子,基本上能實現(xiàn)導(dǎo)入Excel后顯示的功能吧,導(dǎo)入的excel文件得是xls,即是2003的.
代碼思路如下:要讀取的excel文件必得得是在本地硬盤,所以一般來說都是讓遠程用戶選擇自己硬盤上的Excel文件,然后把用戶選擇的文件上傳到本地服務(wù)器上,再在本地服務(wù)器上進行操作.我把界面后置代碼重要部分貼出來,大家自己慢慢看吧,都有注釋了.
- PRotected void btnUp_Click(object sender, EventArgs e)
- {
- bool b = Upload(fuExcel);
- if (!b)
- {
- return;
- }
- string name = fuExcel.FileName;
- string filepath = Server.MapPath("~/upload/") + name;
- DataSet ds = ExcelDataSource(filepath, ExcelSheetName(filepath)[0].ToString());
- GridView1.DataSource = ds;
- GridView1.DataBind();
- }
-
-
- private bool Upload(FileUpload myFileUpload)
- {
- bool flag = false;
-
- bool fileAllow = false;
-
- string[] allowExtensions = { ".xls" };
-
-
- string path = HttpContext.Current.Request.MapPath("~/upload/");
-
- if (myFileUpload.HasFile)
- {
-
- string fileExtension = System.IO.Path.GetExtension(myFileUpload.FileName).ToLower();
-
- for (int i = 0; i < allowExtensions.Length; i++)
- {
- if (fileExtension == allowExtensions[i])
- {
- fileAllow = true;
- }
- }
-
- if (fileAllow)
- {
- try
- {
-
- myFileUpload.SaveAs(path + myFileUpload.FileName);
- lblMes.Text = "文件導(dǎo)入成功";
- flag = true;
- }
- catch (Exception ex)
- {
- lblMes.Text += ex.Message;
- flag = false;
- }
- }
- else
- {
- lblMes.Text = "不允許上載:" + myFileUpload.PostedFile.FileName + ",只能上傳xls的文件,請檢查!";
- flag = false;
- }
- }
- else
- {
- lblMes.Text = "請選擇要導(dǎo)入的excel文件!";
- flag = false;
- }
- return flag;
- }
-
-
- public DataSet ExcelDataSource(string filepath, string sheetname)
- {
- string strConn;
- strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;";
- OleDbConnection conn = new OleDbConnection(strConn);
- OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + sheetname + "]", strConn);
- DataSet ds = new DataSet();
- oada.Fill(ds);
- conn.Close();
- return ds;
- }
-
-
- public ArrayList ExcelSheetName(string filepath)
- {
- ArrayList al = new ArrayList();
- string strConn;
- strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;";
- OleDbConnection conn = new OleDbConnection(strConn);
- conn.Open();
- DataTable sheetNames = conn.GetOleDbSchemaTable
- (System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
- conn.Close();
- foreach (DataRow dr in sheetNames.Rows)
- {
- al.Add(dr[2]);
- }
- return al;
- }
要注意的是我們要一開始就在網(wǎng)站根目錄下建立upload文件夾,而且要把他的權(quán)限設(shè)置為可讀可寫的?這個權(quán)限的問題搞得頭大,不知道到底應(yīng)該怎么搞的,XP系統(tǒng)下新建立的文件夾好像都是只讀的,我右鍵屬性把只讀去掉,結(jié)果再次查看的時候還是只讀,不過好像發(fā)現(xiàn)對程序沒有什么意思,上傳完excel文件后還是可以讀取查看的.