一、页面增加上传控件,并在上传时判断是否是Excel文件(根据后缀名判断):

 1     <table>
2 <tr>
3 <td>
4 <span style="color: Red; clear: both; vertical-align: middle;">*</span> Excel文件:
5 </td>
6 <td>
7 <a>
8 <input type="text" id="des" readonly="readonly" />
9 </a>
10 </td>
11 <td>
12 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
13 <ContentTemplate>
14 <a href="javascript:;" id="aFileUpload" class="files">
15 <input type="file" runat="server" id="FileUpload" title="Select file" name="FileUpload" onchange="document.getElementById('des').value='';if(this.files[0].name.indexOf('.xls')<=0){alert('Please select excel file !');
16 document.getElementById('des').value=''; this.value = null; return;};document.getElementById('des').value=this.files[0].name;" />
17 </a>
18 </ContentTemplate>
19 <Triggers>
20 <asp:PostBackTrigger ControlID="btnOK" />
21 </Triggers>
22 </asp:UpdatePanel>
23 </td>
24 </tr>
25 <tr>
26 <td></td>
27 <td>
28 <asp:Button ID="btnOK" runat="server" Text="确定" OnClick="btnOK_Click" />
29 </td>
30 </tr>
31 </table>

二、增加css样式,用于去掉上传控件默认的样式,使用自定义样式:

 1 <style>
2 /*file容器样式*/
3 a.files {
4 margin: 0 auto;
5 float: left;
6 width: 30px;
7 height: 30px;
8 overflow: hidden;
9 display: block;
10 border: 1px solid #d7d7d7;
11 background: url(browse-l.png) left top no-repeat;
12 text-decoration: none;
13 }
14 /*file设为透明,并覆盖整个触发面*/
15 a.files input {
16 margin-left: -270px;
17 font-size: 24px;
18 cursor: pointer;
19 filter: alpha(opacity=0);
20 opacity: 0;
21 }
22 /*取消点击时的虚线框*/
23 a.files, a.files input {
24 outline: none; /*ff*/
25 hide-focus: expression(this.hideFocus=true); /*ie*/
26 }
27 </style>

三、上传并读取Excel方法:

 1 protected void btnOK_Click(object sender, EventArgs e)
2 {
3 string toFileFullPath = ""; //物理完整路径
4 string filePath = ""; //上传后的文件路径
5 if (HttpContext.Current != null)
6 toFileFullPath = HttpContext.Current.Server.MapPath("~");
7 //检查是否有该路径,没有就创建
8 if (!Directory.Exists(toFileFullPath))
9 Directory.CreateDirectory(toFileFullPath);
10 HttpFileCollection files = Request.Files;
11 if (files.Count > 0)
12 {
13 string fileName = files[0].FileName;
14 string ext = System.IO.Path.GetExtension(fileName);//获取后缀名
15 if (ext == ".xlsx")
16 fileName = "更改的名称.xlsx";
17 else if (ext == ".xls")
18 fileName = "更改的名称.xls";
19 filePath = Path.Combine(toFileFullPath, fileName);
20 files[0].SaveAs(filePath);
21 }
22 DataSet ds = ExcelToDataSet(filePath);
23 for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
24 {
25 //只能读取有表头的列
26 Response.Write(ds.Tables[0].Rows[i][0].ToString());//获取第一列数据
27 Response.Write(ds.Tables[0].Rows[i][1].ToString());//获取第二列数据
28 }
29 }
30
31 /// <summary>
32 /// 功能:导入Excel
33 /// 方式:NPOI
34 /// 支持格式:支持xls和xlsx格式
35 /// 调用注意:默认第一行为表头,从第2行开始读取数据
36 /// </summary>
37 /// <param name="strFileName">excel 文件路径</param>
38 /// <returns></returns>
39 private DataSet ExcelToDataSet(string strFileName)
40 {
41 ISheet sheet = null;
42 DataSet ds = new DataSet();
43 DataTable dt = new DataTable();
44 IWorkbook workbook = null;
45 try
46 {
47 FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read);
48 //if (strFileName.IndexOf(".xlsx") > 0) // 2007版本
49 // workbook = new XSSFWorkbook(file);
50 //else if (strFileName.IndexOf(".xls") > 0) // 2003版本
51 // workbook = new HSSFWorkbook(file);
52 workbook = WorkbookFactory.Create(file);
53 //获取sheet
54 sheet = workbook.GetSheetAt(0);
55 if (sheet != null)
56 {
57 IRow headerRow = sheet.GetRow(0);
58 int cellCount = headerRow.LastCellNum; //一行最后一个cell的编号 即总的列数
59 for (int j = 0; j < cellCount; j++)
60 {
61 ICell cell = headerRow.GetCell(j);
62 if (cell == null)
63 {
64 string strColumnName = (j++).ToString(); //判断如果第一列之后还存在多列,列名必须不同,否则报错
65 dt.Columns.Add(strColumnName);
66 continue;
67 }
68 dt.Columns.Add(cell.ToString());
69 }
70 for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
71 {
72 IRow row = sheet.GetRow(i);
73 DataRow dataRow = dt.NewRow();
74 if (row != null)
75 {
76 for (int j = row.FirstCellNum; j < cellCount; j++)
77 {
78 if (row.GetCell(j) != null)
79 dataRow[j] = row.GetCell(j).ToString();
80 }
81 dt.Rows.Add(dataRow);
82 }
83 }
84 ds.Tables.Add(dt);
85 }
86 return ds;
87 }
88 catch (Exception ex)
89 {
90 Console.WriteLine("Exception: " + ex.Message);
91 return null;
92 }
93 }

附件:

  读取Excel需要添加插件(附插件地址):读取Excel插件.rar

  百度网盘链接:https://pan.baidu.com/s/1otEqimEI3NOCHsc5olSM6A

  提取码:u7zv

 

asp.net上传Excel文件并读取内容,自定义上传控件样式的更多相关文章

  1. 上传excel文件,读取内容,增加事务写入数据库

    package com.inspur.icpmg.itss.asset.dao.impl; import com.inspur.icpmg.util.DBHelper; import org.apac ...

  2. Django框架(上传Excel文件并读取)

    博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py 可以 ...

  3. 从Excel文件中读取内容

    从Excel文件中读取内容 global::System.Web.HttpPostedFileBase file = Request.Files["txtFile"]; strin ...

  4. 【asp.net】asp.net实现上传Excel文件并读取数据

    #前台代码:使用服务端控件实现上传 <form id="form1" runat="server"> <div> <asp:Fil ...

  5. HTML控件ID和NAME属性的区别,以及如何在asp.net页面的.CS文件中获得.ASPX页面中HTML控件的值

    在html中:name指的是用户名称,ID指的是用户注册是系统自动分配给用户的一个序列号. name是用来提交数据的,提供给表单用,可以重复: id则针对文档操作时候用,不能重复.如:document ...

  6. 从GridView中直接导出数据到Excel文件 处理导出乱码 类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常

    导出到Excel方法: <span style="color: rgb(0, 0, 255);">public</span> <span style= ...

  7. 条形码的应用三-----------从Excel文件中读取条形码

    条形码的应用三------从Excel文件中读取条形码 介绍 上一篇文章,我向大家展示了生成多个条形码并存储到Excel文件中的一个方法.后来我又有了个想法:既然条码插入到excel中了,我可不可以从 ...

  8. asp.net上传Excel文件到服务端进行读取

    1.我们IIS是使用7.5,由于在网站中上传Excel文件到服务端进行数据读取时候出现读取失败情况.一开始以为是没有按照office软件问题,其实不然,因为server是64位操作系统,如果我们要使用 ...

  9. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  10. jsp上传excel文件并导入数据库

    1,excel文件的上传 需要借助jar包:commons-fileupload-1.2.1.jar以及commons-io-1.3.2.jar 前端的html文件 <form id=" ...

随机推荐

  1. 力扣591(java)-标签验证器(困难)

    题目: 给定一个表示代码片段的字符串,你需要实现一个验证器来解析这段代码,并返回它是否合法.合法的代码片段需要遵守以下的所有规则: 代码必须被合法的闭合标签包围.否则,代码是无效的. 闭合标签(不一定 ...

  2. 这种精度高,消耗资源少的大模型稀疏训练方法被阿里云科学家找到了!已被收录到IJCAI

    简介: 论文通过减少模型稀疏训练过程中需要更新的参数量,从而减少大模型稀疏训练的时间以及资源开销,是首个大模型参数高效的稀疏训练算法PST. 作者:李深.李与超 近日,阿里云机器学习PAI关于大模型稀 ...

  3. 一位 sealer maintainer 的心路历程

    简介: 本文作者将回顾个人参与 sealer 开源项目的机缘巧合,参与过程中的挑战,以及从中获取的所悟所感,写下一段文字进行分享,希望对开源新人有所帮助,能够激励想参与开源工作但还未踏出第一步的同学. ...

  4. 一套 SQL 搞定数据仓库?Flink有了新尝试

    数据仓库是公司数据发展到一定规模后必然需要提供的一种基础服务,也是"数据智能"建设的基础环节.迅速获取数据反馈不仅有利于改善产品及用户体验,更有利于公司的科学决策,因此获取数据的实 ...

  5. C++ 多态与虚拟:Class 语法语义

    1.object与class:在object-oriented programming编程领域,对象(object)有更严格的定义.对象是由数据结构和用于处理该结构的过程(称为methods)组成的实 ...

  6. LlamaIndex 高层次概念

    本篇内容为您快速介绍在构建基于大型语言模型(LLM)的应用程序时会频繁遇到的一些核心概念. 增强检索生成(RAG) LLM 是基于海量数据训练而成,但并未涵盖您的具体数据.增强检索生成(Retriev ...

  7. dotnet 读 WPF 源代码 聊聊 DispatcherTimer 的实现

    本文来告诉大家在 WPF 框架里面,是如何实现 DispatcherTimer 的功能.有小伙伴告诉我,读源代码系列的博客看不动,原因是太底层了.我尝试换一个方式切入逻辑,通过提问题和解决问题的方法, ...

  8. C++多态与虚拟:C++编译器对函数名的改编(Name Mangling)

    如果函数名称都相同(也就是被overloaded),编译器在面对你的函数唤起动作时,究竟是如何确定调用哪个函数实体呢?事实上,编译器把所有同名的overloaded functions视为不同的函数, ...

  9. iptables命令详解

    安装iptables yum install iptables-services 编写允许访问的策略 vim /etc/sysconfig/iptables # sample configuratio ...

  10. ansible(19)--ansible的playbook

    目录 1. playbook简介 2. playbook编写规范 2.1 YAML语法规范 2.2 YAML语法要素 2.3 Playbook核心元素 2.4 Playbook的基础组件 3 Play ...