asp.net上传Excel文件并读取内容,自定义上传控件样式
一、页面增加上传控件,并在上传时判断是否是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文件并读取内容,自定义上传控件样式的更多相关文章
- 上传excel文件,读取内容,增加事务写入数据库
package com.inspur.icpmg.itss.asset.dao.impl; import com.inspur.icpmg.util.DBHelper; import org.apac ...
- Django框架(上传Excel文件并读取)
博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py 可以 ...
- 从Excel文件中读取内容
从Excel文件中读取内容 global::System.Web.HttpPostedFileBase file = Request.Files["txtFile"]; strin ...
- 【asp.net】asp.net实现上传Excel文件并读取数据
#前台代码:使用服务端控件实现上传 <form id="form1" runat="server"> <div> <asp:Fil ...
- HTML控件ID和NAME属性的区别,以及如何在asp.net页面的.CS文件中获得.ASPX页面中HTML控件的值
在html中:name指的是用户名称,ID指的是用户注册是系统自动分配给用户的一个序列号. name是用来提交数据的,提供给表单用,可以重复: id则针对文档操作时候用,不能重复.如:document ...
- 从GridView中直接导出数据到Excel文件 处理导出乱码 类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常
导出到Excel方法: <span style="color: rgb(0, 0, 255);">public</span> <span style= ...
- 条形码的应用三-----------从Excel文件中读取条形码
条形码的应用三------从Excel文件中读取条形码 介绍 上一篇文章,我向大家展示了生成多个条形码并存储到Excel文件中的一个方法.后来我又有了个想法:既然条码插入到excel中了,我可不可以从 ...
- asp.net上传Excel文件到服务端进行读取
1.我们IIS是使用7.5,由于在网站中上传Excel文件到服务端进行数据读取时候出现读取失败情况.一开始以为是没有按照office软件问题,其实不然,因为server是64位操作系统,如果我们要使用 ...
- 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的路由方案,与原来的方案在使用上差别不 ...
- jsp上传excel文件并导入数据库
1,excel文件的上传 需要借助jar包:commons-fileupload-1.2.1.jar以及commons-io-1.3.2.jar 前端的html文件 <form id=" ...
随机推荐
- EasyNLP开源|中文NLP+大模型落地,EasyNLP is all you need
简介:EasyNLP背后的技术框架如何设计?未来有哪些规划?今天一起来深入了解. 作者 | 临在.岑鸣.熊兮 来源 | 阿里开发者公众号 一 导读 随着BERT.Megatron.GPT-3等预训练 ...
- DTCC 2020 | 阿里云梁高中:DAS之基于Workload的全局自动优化实践
简介: 第十一届中国数据库技术大会(DTCC2020),在北京隆重召开.在12.23日性能优化与SQL审计专场上,邀请了阿里巴巴数据库技术团队高级技术专家梁高中为大家介绍DAS之基于Workload的 ...
- Redis 7.0 Multi Part AOF的设计和实现
简介:本文将详解Redis中现有AOF机制的一些不足以及Redis 7.0中引入的Multi Part AOF的设计和实现细节. Redis 作为一种非常流行的内存数据库,通过将数据保存在内存中,R ...
- 基于Python语言的数据可视化工具
在数据分析中常用的图表可以使用使用 python语言的 matplotlib 和 seaborn 库选择要显示的可视化对象. 一.Matplotlib Matplotlib 是一个 Python 的 ...
- IIncrementalGenerator 判断程序集之间可见关系
本文告诉大家如何在使用 IIncrementalGenerator 进行增量的 Source Generator 生成代码时,如何判断两个程序集之间是否存在 InternalsVisibleTo 关系 ...
- dotnet OpenXML 文本删除线解析方法
本文来告诉大家如何解析读取在 OpenXML 里面存放的文本删除线,本文使用 PowerPoint 作为例子来告诉大家如何读取然后在 WPF 应用里面显示 在开始之前,期望大家已了解如何在 dotne ...
- 10.Sidecar代理:日志架构
官方文档:https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/logging/ 题目:Sidecar代理 设置配置环境ku ...
- docker镜像仓库搭建-Harbor
一.Harbor简介 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器. 作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全.提升用户使用 ...
- 一篇教程搞定Windows系统中的Docker应用安装
目录 1. 引言 2. "Docker -> WSL -> Windows"的依赖逻辑 3. 安装方法 3.1 安装WSL 3.2 安装Docker Desktop 4 ...
- synchronized原理-字节码分析、对象内存结构、锁升级过程、Monitor
本文分析的问题: synchronized 字节码文件分析之 monitorenter.monitorexit 指令 为什么任何一个Java对象都可以成为一把锁? 对象的内存结构 锁升级过程 Moni ...