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

   如果需要将Excel中的数据对应写到数据库表中请参见后学用SqlBulkCopy一次性将多条数据赋值到表中:http://www.cnblogs.com/MichaelWillLee/p/6843862.html

用到的资源:

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

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

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

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

===========前台开始===============

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head runat="server">
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 5     <title>导入EXCEL,生成DataTable</title>
 6     <script src="../../Themes/Scripts/jquery-1.8.2.min.js"></script>
 7     <link href="/Themes/Styles/Site.css" rel="stylesheet" type="text/css" />
 8     <script src="/Themes/Scripts/FunctionJS.js" type="text/javascript"></script>
 9
10     <script type="text/javascript">
11         $(document).ready(function () {
12             $("#Import").click(function () {
13                 var filename = $("#FileUpload1").val();
14                 if (filename == '') {
15                     alert('请选择上传的EXCEL文件');
16                     return false;
17                 }
18                 else {
19                     var exec = (/[.]/.exec(filename)) ? /[^.]+$/.exec(filename.toLowerCase()) : '';
20                     if (!(exec == "xlsx" || exec == "xls")) {
21                         alert("文件格式不对,请上传Excel文件!");
22                         return false;
23                     }
24                 }
25                 return true;
26             });
27         });
28     </script>
29 </head>
30 <body>
31     <form id="form1" runat="server">
32     <div>
33         <asp:FileUpload ID="FileUpload1" runat="server" /><asp:Button ID="Import" runat="server" Text="导入" OnClick="ImpClick" />
34     </div>
35     </form>
36 </body>
37 </html>

View Code

  ===========前台结束===============

  ===========后台开始===============

  1  protected void ImpClick(object sender, EventArgs e)
  2         {
  3             try
  4             {
  5                 #region 校验
  6                 var fileName = this.FileUpload1.FileName;
  7                 if (string.IsNullOrWhiteSpace(fileName))
  8                 {
  9                     //提示信息
 10                     ShowMsgHelper.Alert("请选择上传Excel文件");
 11                     return;
 12                 }
 13
 14                 //获取上传文件扩展名称
 15                 if (!(fileName.IndexOf(".xlsx") > 0 || fileName.IndexOf(".xls") > 0))
 16                 {
 17                     ShowMsgHelper.Alert("上传文件格式不正确,请核对!");
 18                     return;
 19                 }
 20
 21
 22                 #endregion
 23
 24                 #region 将Excel文件上传到服务器上临时文件夹中
 25                 //临时文件夹,根目录下/Upload/tmp/,根据自己配置选择
 26                 string path = Server.MapPath("~/") + "Upload\\tmp\\";
 27                 string retStr=UploadHelper.FileUpload(path, this.FileUpload1);
 28                 if (!retStr.Equals("上传成功")) {
 29                     ShowMsgHelper.Alert(retStr);
 30                     return;
 31                 }
 32                 #endregion
 33
 34                 #region 读取Excel文件第一个表获取内容并转换成DataTable,删除临时文件,也可以自己加时间戳,维护处理
 35                 DataTable dt = this.ExcelToDataTable(path + this.FileUpload1.FileName, true);
 36                 if (dt == null) {
 37                     ShowMsgHelper.Alert_Error("获取失败");
 38                     return;
 39                 }
 40
 41                 //示例:获取dt中的值
 42                 string test = dt.Rows[0]["name"].ToString();
 43                 string test2 = dt.Rows[1]["class"].ToString();
 44
 45                 //删除临时文件
 46                 DirFileHelper.DeleteFile("Upload\\tmp\\" + fileName);
 47                 #endregion
 48
 49             }
 50             catch (Exception ex) {
 51                 throw ex;
 52             }
 53
 54         }
 55
 56         /// <summary>
 57         /// 将excel导入到datatable
 58         /// </summary>
 59         /// <param name="filePath">excel路径</param>
 60         /// <param name="isColumnName">第一行是否是列名</param>
 61         /// <returns>返回datatable</returns>
 62         public DataTable ExcelToDataTable(string filePath, bool isColumnName)
 63         {
 64             DataTable dataTable = null;
 65             FileStream fs = null;
 66             DataColumn column = null;
 67             DataRow dataRow = null;
 68             IWorkbook workbook = null;
 69             ISheet sheet = null;
 70             IRow row = null;
 71             ICell cell = null;
 72             int startRow = 0;
 73             try
 74             {
 75                 using (fs = File.OpenRead(filePath))
 76                 {
 77                     // 2007版本
 78                     if (filePath.IndexOf(".xlsx") > 0)
 79                         workbook = new XSSFWorkbook(fs);
 80                     // 2003版本
 81                     else if (filePath.IndexOf(".xls") > 0)
 82                         workbook = new HSSFWorkbook(fs);
 83
 84                     if (workbook != null)
 85                     {
 86                         sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet
 87                         dataTable = new DataTable();
 88                         if (sheet != null)
 89                         {
 90                             int rowCount = sheet.LastRowNum;//总行数
 91                             if (rowCount > 0)
 92                             {
 93                                 IRow firstRow = sheet.GetRow(0);//第一行
 94                                 int cellCount = firstRow.LastCellNum;//列数
 95
 96                                 //构建datatable的列
 97                                 if (isColumnName)
 98                                 {
 99                                     startRow = 1;//如果第一行是列名,则从第二行开始读取
100                                     for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
101                                     {
102                                         cell = firstRow.GetCell(i);
103                                         if (cell != null)
104                                         {
105                                             if (cell.StringCellValue != null)
106                                             {
107                                                 column = new DataColumn(cell.StringCellValue);
108                                                 dataTable.Columns.Add(column);
109                                             }
110                                         }
111                                     }
112                                 }
113                                 else
114                                 {
115                                     for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
116                                     {
117                                         column = new DataColumn("column" + (i + 1));
118                                         dataTable.Columns.Add(column);
119                                     }
120                                 }
121
122                                 //填充行
123                                 for (int i = startRow; i <= rowCount; ++i)
124                                 {
125                                     row = sheet.GetRow(i);
126                                     if (row == null) continue;
127
128                                     dataRow = dataTable.NewRow();
129                                     for (int j = row.FirstCellNum; j < cellCount; ++j)
130                                     {
131                                         cell = row.GetCell(j);
132                                         if (cell == null)
133                                         {
134                                             dataRow[j] = "";
135                                         }
136                                         else
137                                         {
138                                             //CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)
139                                             switch (cell.CellType)
140                                             {
141                                                 case CellType.Blank:
142                                                     dataRow[j] = "";
143                                                     break;
144                                                 case CellType.Numeric:
145                                                     short format = cell.CellStyle.DataFormat;
146                                                     //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理
147                                                     if (format == 14 || format == 31 || format == 57 || format == 58)
148                                                         dataRow[j] = cell.DateCellValue;
149                                                     else
150                                                         dataRow[j] = cell.NumericCellValue;
151                                                     break;
152                                                 case CellType.String:
153                                                     dataRow[j] = cell.StringCellValue;
154                                                     break;
155                                             }
156                                         }
157                                     }
158                                     dataTable.Rows.Add(dataRow);
159                                 }
160                             }
161                         }
162                     }
163                 }
164                 return dataTable;
165             }
166             catch (Exception)
167             {
168                 if (fs != null)
169                 {
170                     fs.Close();
171                 }
172                 return null;
173             }
174         }

View Code

  ===========后台结束===============

  

转载于:https://www.cnblogs.com/MichaelWillLee/p/6633674.html

ASP.NET 实现上传EXCEL,利用NOPI操作,转换得到DataTable相关推荐

  1. asp如何将图片文件上传到mysql数据库中_怎样才能利用ASP把图片上传到数据库

    欢迎来到小编的文章进行学习阅读,想必大家又有很多问题吧,在这里会有你想要收获的答案,请大家慢慢学习吧! ASP(Active Server Pages)是Microsoft很早就推出的一种WEB应用程 ...

  2. 服务器上传excel文件并读取数据,asp.net上传Excel文件并读取数据的实现方法

    前言 本文主要给大家介绍了关于asp.net上传Excel文件并读取数据的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 实现如下: 前台代码:使用服务端控件实现上传 服务端 ...

  3. ASP.NET文件上传和下载

    大学最近作出相关的需求进行上传和下载文件的网站(求为:站点发布的通知,在后台要能给每一个通知加入附件.在前台要能显示并下载附件),之前仅仅是学习过关于上传的 理论知识,这里实践了一下下,与大家分享一下 ...

  4. fckeditor 漏洞php,fckeditor上传漏洞利用总结

    FCKeditor FCKeditor编辑器页/查看编辑器版本/查看文件上传路径 FCKeditor编辑器页 FCKeditor/_samples/default.html  查看编辑器版本 FCKe ...

  5. POI上传Excel的小问题处理

    package com.platform.utils.excel;import com.platform.utils.RRException; import org.springframework.w ...

  6. 前端 js 上传excel表格、文件

    一.场景 产品给了个设计图,需要点击[自定义]图标或者其他图片来完成上传的动作.(打开选择文件弹窗,并选择文件) 思路:利用 input-type 的 "file" 属性来完成. ...

  7. 【《编辑器篇》kindeditor 文件上传漏洞利用】

    <编辑器篇>kindeditor 文件上传漏洞利用             一.漏洞描述 KindEditor是一套开源的HTML可视化编辑器,其采用的开发语言支持asp.aspx.php ...

  8. 上传excel到服务器端,并写入到mssql数据库

    经常会有人问这个问题,所以整好一个就放上来!这里只涉及到实现,并不涉及到性能或者可拓展性! 本例子测试成功!(vs2008 +sql2005+office2007) 思路:先上传XLS文件,然后用Ol ...

  9. 实现web前端上传excel文件到flask服务器

    这里有两种方法:1. html方式:2. javascript方式(jQuery+ajax) 第1种方法:html方式 这种方法直接通过设计form表单相关属性实现将excel表格上传到服务器,并在服 ...

最新文章

  1. modelsim中仿真波形设置的保存
  2. [问题处理]redmine的gantt图导出出现‘星星星星星星星星’怎么解决
  3. Linux shell编程学习笔记-----第十六章
  4. 密码学原理与实践_到底什么是防火墙入侵检测密码学身份认证?如何高效建立网络安全知识体系?...
  5. 吉林建筑大学电气与计算机学院院长,吉林建筑大学电气与计算机学院研究生导师:张玉红...
  6. Android应用性能优化整体策略
  7. 改变Linux的DNS解析顺序(DNS到hosts)
  8. 中国程序员最爱读错的70个英文单词!注有正解
  9. Linux下批量tiff转pdf
  10. 通信工程cdma篇-网优网规基础
  11. 数据预处理_缺失值处理
  12. 隔段时间网络就会变差,重启路由器恢复,这是为什么
  13. JS设计模式(二)-Revealing Module(揭示模式)
  14. jmeter学习指南之生成html性能结果报告(篇幅较长谨慎阅读)
  15. 2022再往前,品牌“出海”还能不能做?
  16. python下载博文中微博图床图片
  17. linux系统如何改电脑地址,如何修改电脑的操作系统MAC地址
  18. Excel VBA之类模块 实例
  19. (附源码)计算机毕业设计SSM游泳馆管理系统
  20. C/C++编程日记:C++ 实现太阳系行星项目系统

热门文章

  1. 小试ImageMagik——使用篇
  2. jQuery 图表插件 jqChart 使用
  3. Tiny Jpeg Decoder (JPEG解码程序) 源代码分析 2:解码数据
  4. maya对象属性_了解每粒子属性和每对象属性
  5. linux下用tcpdump抓包
  6. MySQL 8小时空闲后连接失效的解决
  7. 【云计算】阿里云云计算架构师ACE成长路线v2
  8. 【Luogu1160】队列安排(双向链表)
  9. 通过hsv筛选颜色 python_OpenCV-Python 光流介绍(附代码)
  10. html5标签之表单元素