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

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

用到的资源:

  (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>

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

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

  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         }

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

  

时间: 2024-10-10 20:31:17

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

下载不含数据EXCEL的固定表头模版(标准EXCEL只含有列头),然后上传EXCEL.显示成功和上传失败的EXCEL连接

<div id="import" runat="server" visible="false"> Step1:<asp:HyperLink ID="HyperLink1" NavigateUrl="~/CommonTemplate/设备清单模版.xlsx" runat="server">下载模版</asp:HyperLink><br />

abap金税上传EXCEL版

SAP ERP ECC6.0标准功能提供给了金税接口,对于一般的公司来说,这个接口基本也够了. 事务代码:GT_DLN 下载SAP发票信息: 事务代码:GT_ULN 上传金税信息到SAP中: 前提条件:SAP ERP ECC6.0 功能增强包EHp3及以上. 激活业务功能事务代码 SFW5选择业务功能FIN_LOC_CI_1,点击激活按钮. 激活业务功能包后,系统将执行一个后台任务,执行可能需要长达一小时. 参见SAP Note:Note 1290073 – China Golden Tax S

js上传Excel文件

一.问题 需要在项目里添加一个上传excel文件的功能,因为其他同样的后台里面有上传文件的功能,第一反应就是想着直接用.了解了一下发现它是利用bootstrap的fileinput实现的,但是我怎么都不能把fileinput插件给加到java的项目里,然后就只能自己用js实现吧.好像也没什么特别的需求. 1)原本的样式不好看,需要和项目一致 2)只上传xls和xlxs的文件 二.代码 <input type="file" id="file" name=&quo

C# Asp.NET实现上传大文件(断点续传)

以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传  可以带参数 [HttpPost("upload")] public JsonResult uploadProject(IFormFile file, string userId) { if (file != null) { var fileDir = "D:\\aaa"

eclipse中导入jdk源码、SpringMVC注解@RequestParam、SpringMVC文件上传源码解析、ajax上传excel文件

eclipse中导入jdk源码:http://blog.csdn.net/evolly/article/details/18403321, http://www.codingwhy.com/view/799.html. ------------------------------- SpringMVC注解@RequestParam:http://825635381.iteye.com/blog/2196911. --------------------------- SpringMVC文件上传源

艾恩ASP无组件上传类(上传组件)说明文档(from www.sysoft.cc)

艾恩ASP无组件上传类(上传组件)说明文档2010-1-18 By Anlige一.简介自从接触ASP就开始接触上传,看过一些上传类,但是总感觉封装的还是不够简单,因此自己尝试写一个能够用最少最简单的代码实现各种上传方式的上传类.在学校期间就开始写,一点点的完善.优化,到现在的版本,现在的版本能适应各种上传方式.上传类的主要的功能如下:1.自由设置最大上传大小.单文件最大上传大小2.自由设置允许上传的文件类型3.可设置文本的编码,以适应各种上传环境4.内置进度条,a用户可选择开启和关闭5.多种错

js兼容ie获取上传excel文件名称以及大小,绝对路径

/**  *   * @param obj file对象 document.getElementById(elementId);  * @returns  */ function getExcelFileFullPath(obj){ if (obj){ // ie if (window.navigator.userAgent.indexOf("MSIE") >= 1){ obj.select(); return document.selection.createRange().t

你以为的ASP.NET文件上传大小限制是你以为的吗

我们以为的文件大小限制 我们大家都知道ASP.NET为我们提供了文件上传服务器控件FileUpload,默认情况下可上传的最大文件为4M,如果要改变可上传文件大小限制,那么我们可以在web.config中的httpRuntime元素中添加maxRequestLength属性设置大小,同时为了支持大文件上传超时可以添加executionTimeout属性设置超时时间.网上有很多这样的例子,但实际情况是否是这样吗? <httpRuntime maxRequestLength="" e

上传excel数据到数据库中

上传excel表格数据到数据库 导入固定路径下的excel数据到数据库 <form id="disposeFlightDataForm" action="../upload/disposeFlightData" method="post"> <input id="disposeFlightDataButton" type="submit" value="处理航班数据"