欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET实现上传Excel功能

程序员文章站 2023-10-21 21:35:25
这几天正好用到上传excel,并根据excel中的数据做相应的处理,故整理以备用。 用到的资源: (1)nopi 2.2.0.0 可自己官网下载,也可点击:http:/...

这几天正好用到上传excel,并根据excel中的数据做相应的处理,故整理以备用。

用到的资源:

(1)nopi 2.2.0.0 可自己官网下载,也可点击:http://pan.baidu.com/s/1b1emdg

(2)用到一些常见处理文件的公共方法类,可以添加到项目中:http://pan.baidu.com/s/1bjphuq

如过上述连接因故无法使用,可在评论留下邮箱,我打包发送过去,如有更好的建议,欢迎指导。

后台的提示方法showmsghelper,根据自己的改写即可。

前台代码:

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
 <title>导入excel,生成datatable</title>
 <script src="../../themes/scripts/jquery-1.8.2.min.js"></script>
 <link href="/themes/styles/site.css" rel="external nofollow" rel="stylesheet" type="text/css" />
 <script src="/themes/scripts/functionjs.js" type="text/javascript"></script>
 
 <script type="text/javascript">
 $(document).ready(function () {
  $("#import").click(function () {
  var filename = $("#fileupload1").val();
  if (filename == '') {
   alert('请选择上传的excel文件');
   return false;
  }
  else {
   var exec = (/[.]/.exec(filename)) ? /[^.]+$/.exec(filename.tolowercase()) : '';
   if (!(exec == "xlsx" || exec == "xls")) {
   alert("文件格式不对,请上传excel文件!");
   return false;
   }
  }
  return true;
  });
 });
 </script>
</head>
<body>
 <form id="form1" runat="server">
 <div>
 <asp:fileupload id="fileupload1" runat="server" /><asp:button id="import" runat="server" text="导入" onclick="impclick" />
 </div>
 </form>
</body>
</html>

后台代码;

protected void impclick(object sender, eventargs e)
 {
  try
  {
  #region 校验
  var filename = this.fileupload1.filename;
  if (string.isnullorwhitespace(filename))
  {
   //提示信息
   showmsghelper.alert("请选择上传excel文件");
   return;
  }
  //获取上传文件扩展名称
  if (!(filename.indexof(".xlsx") > 0 || filename.indexof(".xls") > 0))
  {
   showmsghelper.alert("上传文件格式不正确,请核对!");
   return;
  }
  #endregion
  #region 将excel文件上传到服务器上临时文件夹中
  //临时文件夹,根目录下/upload/tmp/,根据自己配置选择
  string path = server.mappath("~/") + "upload\\tmp\\";
  string retstr=uploadhelper.fileupload(path, this.fileupload1);
  if (!retstr.equals("上传成功")) {
   showmsghelper.alert(retstr);
   return;
  }
  #endregion
  #region 读取excel文件第一个表获取内容并转换成datatable,删除临时文件,也可以自己加时间戳,维护处理
  datatable dt = this.exceltodatatable(path + this.fileupload1.filename, true);
  if (dt == null) {
   showmsghelper.alert_error("获取失败");
   return;
  }
  //示例:获取dt中的值
  string test = dt.rows[0]["name"].tostring();
  string test2 = dt.rows[1]["class"].tostring();
  //删除临时文件
  dirfilehelper.deletefile("upload\\tmp\\" + filename);
  #endregion 
  }
  catch (exception ex) {
  throw ex;
  }
 }
 /// <summary>
 /// 将excel导入到datatable
 /// </summary>
 /// <param name="filepath">excel路径</param>
 /// <param name="iscolumnname">第一行是否是列名</param>
 /// <returns>返回datatable</returns>
 public datatable exceltodatatable(string filepath, bool iscolumnname)
 {
  datatable datatable = null;
  filestream fs = null;
  datacolumn column = null;
  datarow datarow = null;
  iworkbook workbook = null;
  isheet sheet = null;
  irow row = null;
  icell cell = null;
  int startrow = 0;
  try
  {
  using (fs = file.openread(filepath))
  {
   // 2007版本
   if (filepath.indexof(".xlsx") > 0)
   workbook = new xssfworkbook(fs);
   // 2003版本
   else if (filepath.indexof(".xls") > 0)
   workbook = new hssfworkbook(fs);
   if (workbook != null)
   {
   sheet = workbook.getsheetat(0);//读取第一个sheet,当然也可以循环读取每个sheet
   datatable = new datatable();
   if (sheet != null)
   {
    int rowcount = sheet.lastrownum;//总行数
    if (rowcount > 0)
    {
    irow firstrow = sheet.getrow(0);//第一行
    int cellcount = firstrow.lastcellnum;//列数

    //构建datatable的列
    if (iscolumnname)
    {
     startrow = 1;//如果第一行是列名,则从第二行开始读取
     for (int i = firstrow.firstcellnum; i < cellcount; ++i)
     {
     cell = firstrow.getcell(i);
     if (cell != null)
     {
      if (cell.stringcellvalue != null)
      {
      column = new datacolumn(cell.stringcellvalue);
      datatable.columns.add(column);
      }
     }
     }
    }
    else
    {
     for (int i = firstrow.firstcellnum; i < cellcount; ++i)
     {
     column = new datacolumn("column" + (i + 1));
     datatable.columns.add(column);
     }
    }
    //填充行
    for (int i = startrow; i <= rowcount; ++i)
    {
     row = sheet.getrow(i);
     if (row == null) continue;

     datarow = datatable.newrow();
     for (int j = row.firstcellnum; j < cellcount; ++j)
     {
     cell = row.getcell(j);
     if (cell == null)
     {
      datarow[j] = "";
     }
     else
     {
      //celltype(unknown = -1,numeric = 0,string = 1,formula = 2,blank = 3,boolean = 4,error = 5,)
      switch (cell.celltype)
      {
      case celltype.blank:
       datarow[j] = "";
       break;
      case celltype.numeric:
       short format = cell.cellstyle.dataformat;
       //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理
       if (format == 14 || format == 31 || format == 57 || format == 58)
datarow[j] = cell.datecellvalue;
else       datarow[j] = cell.numericcellvalue;
break;
      case celltype.string:
datarow[j] = cell.stringcellvalue;
break;
      }
     }
     }
     datatable.rows.add(datarow);
    }
    }
   }
   }
  }
  return datatable;
  }
  catch (exception)
  {
  if (fs != null)
  {
   fs.close();
  }
  return null;
  }
 }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!