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=" ...
随机推荐
- 力扣564(java)-寻找最近的回文数(困难)
题目: 给定一个表示整数的字符串 n ,返回与它最近的回文整数(不包括自身).如果不止一个,返回较小的那个. "最近的"定义为两个整数差的绝对值最小. 示例 1: 输入: n = ...
- 面向云时代的龙蜥操作系统,是 CentOS 替代的最佳选择
简介: 龙蜥致力于打造"芯""系"同频.云化创新.多快好省.安稳易用的操作系统产品! 2022 开放原子全球开源峰会 OpenAnolis 分论坛上,阿里云智能 ...
- Fluid 0.5 版本发布:开启数据集缓存在线弹性扩缩容之路
简介: 为了解决大数据.AI 等数据密集型应用在云原生场景下,面临的异构数据源访问复杂.存算分离 I/O 速度慢.场景感知弱调度低效等痛点问题,南京大学PASALab.阿里巴巴.Alluxio 在 2 ...
- [FE] iframe 相关选项 x-frame-options: 设置 meta 标签无效 & helmet
The X-Frame-Options HTTP 响应头是用来给浏览器 指示允许一个页面 可否在 <frame>, <iframe>, <embed> 或者 < ...
- WPF 基于 .NET 5 框架和 .NET 6 的 SDK 进行完全单文件发布
本文来告诉大家如何基于 .NET 5 框架和 .NET 6 SDK 进行完全单文件发布,这是对 WPF 应用程序进行独立发布,生成的是完全单文件的方法 在之前的版本,尽管也是基于 .NET 5 框架的 ...
- dotnet 读 WPF 源代码笔记 提升调试效率的 NamedObject 类型
本文来聊聊 WPF 那些值得称赞的设计中的 NamedObject 类型.在 WPF 中,有很多值得我学习的设计开发思想,其中就包括本文将要介绍的 NamedObject 类型.此类型的定义仅仅只是为 ...
- Anaconda环境下GPT2-Chinese的基本使用记录
偶然在看到了这个项目,感觉很厉害,于是就折腾了下,跑了一跑 项目地址:https://github.com/Morizeyao/GPT2-Chinese 如果Github下载太慢的可以用这个代下载:h ...
- k8s网页访问实战
流程: 客户端访问--->ingress七层代理---->service四层代理---->deployment 详细情况:https://www.cnblogs.com/yangme ...
- 建立成功平台工程的关键:自助式 IaC
从技术上讲,云一直都是自助式服务,但由于其在实践中的复杂性,许多开发人员并不喜欢.随着公司采用现代架构(云原生.无服务器等)和新的提供商(多云.SaaS 应用程序),以及云提供商发布更多服务,云变得更 ...
- WebGL实现简易的局部“马赛克”
前言 接触过Canvas的小伙伴应该都知道,在Canvas2D中我们要加载一个图片很简单,通过调用drawImage API就能将图像绘制到画布上,当然在WebGL中我们也可以绘制图像,在绘制时我们需 ...