ASP.NET中读取excel内容并显示

时间:2023-03-10 00:09:27
ASP.NET中读取excel内容并显示

项目中经常会用到把excel的文件内容导入到数据库中的,刚刚花了点时间,做了个例子,基本上能实现导入Excel后显示的功能吧,导入的excel文件得是xls,即是2003的. 
    代码思路如下:要读取的excel文件必得得是在本地硬盘,所以一般来说都是让远程用户选择自己硬盘上的Excel文件,然后把用户选择的文件上传到本地服务器上,再在本地服务器上进行操作.我把界面后置代码重要部分贴出来,大家自己慢慢看吧,都有注释了.

  1. // 上传按钮
  2. protected void btnUp_Click(object sender, EventArgs e)
  3. {
  4. bool b = Upload(fuExcel);  // 上传excel文件
  5. if (!b)
  6. {
  7. return;
  8. }
  9. string name = fuExcel.FileName;
  10. string filepath = Server.MapPath("~/upload/") + name;
  11. DataSet ds = ExcelDataSource(filepath, ExcelSheetName(filepath)[0].ToString());
  12. GridView1.DataSource = ds;
  13. GridView1.DataBind();
  14. }
  15. //上传文件方法
  16. private bool Upload(FileUpload myFileUpload)
  17. {
  18. bool flag = false;
  19. //是否允许上载
  20. bool fileAllow = false;
  21. //设定允许上载的扩展文件名类型
  22. string[] allowExtensions = { ".xls" };
  23. //取得网站根目录路径
  24. string path = HttpContext.Current.Request.MapPath("~/upload/");
  25. //检查是否有文件案
  26. if (myFileUpload.HasFile)
  27. {
  28. //取得上传文件之扩展文件名,并转换成小写字母
  29. string fileExtension = System.IO.Path.GetExtension(myFileUpload.FileName).ToLower();
  30. //检查扩展文件名是否符合限定类型
  31. for (int i = 0; i < allowExtensions.Length; i++)
  32. {
  33. if (fileExtension == allowExtensions[i])
  34. {
  35. fileAllow = true;
  36. }
  37. }
  38. if (fileAllow)
  39. {
  40. try
  41. {
  42. //存储文件到文件夹
  43. myFileUpload.SaveAs(path + myFileUpload.FileName);
  44. lblMes.Text = "文件导入成功";
  45. flag = true;
  46. }
  47. catch (Exception ex)
  48. {
  49. lblMes.Text += ex.Message;
  50. flag = false;
  51. }
  52. }
  53. else
  54. {
  55. lblMes.Text = "不允许上载:" + myFileUpload.PostedFile.FileName + ",只能上传xls的文件,请检查!";
  56. flag = false;
  57. }
  58. }
  59. else
  60. {
  61. lblMes.Text = "请选择要导入的excel文件!";
  62. flag = false;
  63. }
  64. return flag;
  65. }
  66. //该方法实现从Excel中导出数据到DataSet中,其中filepath为Excel文件的绝对路径, sheetname为excel文件中的表名
  67. public DataSet ExcelDataSource(string filepath, string sheetname)
  68. {
  69. string strConn;
  70. strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;";
  71. OleDbConnection conn = new OleDbConnection(strConn);
  72. OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + sheetname + "]", strConn);
  73. DataSet ds = new DataSet();
  74. oada.Fill(ds);
  75. conn.Close();
  76. return ds;
  77. }
  78. //获得Excel中的所有sheetname。
  79. public ArrayList ExcelSheetName(string filepath)
  80. {
  81. ArrayList al = new ArrayList();
  82. string strConn;
  83. strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;";
  84. OleDbConnection conn = new OleDbConnection(strConn);
  85. conn.Open();
  86. DataTable sheetNames = conn.GetOleDbSchemaTable
  87. (System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
  88. conn.Close();
  89. foreach (DataRow dr in sheetNames.Rows)
  90. {
  91. al.Add(dr[2]);
  92. }
  93. return al;
  94. }

要注意的是我们要一开始就在网站根目录下建立upload文件夹,而且要把他的权限设置为可读可写的?这个权限的问题搞得头大,不知道到底应该怎么搞的,XP系统下新建立的文件夹好像都是只读的,我右键属性把只读去掉,结果再次查看的时候还是只读,不过好像发现对程序没有什么意思,上传完excel文件后还是可以读取查看的.