ASP.NET实现上传Excel功能
程序员文章站
2023-11-29 21:42:58
这几天正好用到上传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; } }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!