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=" ...
随机推荐
- 可观测|时序数据降采样在Prometheus实践复盘
简介: 基于 Prometheus 的监控实践中,尤其是在规模较大时,时序数据的存储与查询是其中非常关键,而且问题点较多的一环.如何应对大数据量下的长周期查询,原生的 Prometheus 体系并未能 ...
- 重磅官宣:Nacos2.0发布,性能提升10倍
简介: Nacos2.0 作为一个跨代版本,彻底解决了 Nacos1.X 的性能问题,将性能提升了 10 倍. 作者:席翁 继 Nacos 1.0 发布以来,Nacos 迅速被成千上万家企业采用,并 ...
- 一文理解 K8s 容器网络虚拟化
简介:本文需要读者熟悉 Ethernet(以太网)的基本原理和 Linux 系统的基本网络命令,以及 TCP/IP 协议族并了解传统的网络模型和协议包的流转原理.文中涉及到 Linux 内核的具体实现 ...
- WPF 关于将 ManipulationDeltaEventArgs 的 Manipulators 属性返回值修改为 ReadOnlyCollection 类型的提议
这是一个 WPF 框架的 API 变更提议,记录一下博客 讨论的地方是: How about change the type of ManipulationDeltaEventArgs.Manipul ...
- WPF 如何获取有哪些 VisualBrush 用了某个控件
我写了一个特殊的控件,我期望了解到有哪些 VisualBrush 捕获了此控件,或者说有哪些 VisualBrush 用了此控件的界面 本文的方法需要用到反射,需要使用 WPF 框架里面没有公开的字段 ...
- 2019-10-18-C#-判断系统版本
title author date CreateTime categories C# 判断系统版本 lindexi 2019-10-18 15:2:0 +0800 2018-03-08 17:34:3 ...
- 【GUI开发】用python爬YouTube博主信息,并开发成exe软件!
目录 一.背景介绍 二.代码讲解 2.1 爬虫 2.2 tkinter界面 2.3 存日志 三.说明 一.背景介绍 你好,我是@马哥python说,一名10年程序猿. 最近我用python开发了一个G ...
- 「IT运维迷宫」那些让人头疼的常见问题与破局之道
在数字化浪潮汹涌的今天,IT运维如同一座错综复杂的迷宫,稍有不慎便可能迷失方向.作为企业运营的幕后英雄,运维团队常常面临着各种突如其来的挑战.本文将带你深入探索IT运维中的那些常见"坑&qu ...
- linux文本三剑客之awk详解
linux文本三剑客之awk详解 目录 linux文本三剑客之awk详解 1.awk命令详解 1.1 awk的处理流程 1.2 awk中的变量 1.2.1 内置变量 1.2.2 自定义变量 1.3 a ...
- three.js教程6-加载外部三维模型gltf
1.建模软件 3D美术常用的三维建模软件,比如Blender.3damx.C4D.maya等等 Blender(轻量.免费.开源) 3damx C4D maya 机械相关:SW.UG等 建筑相关:草图 ...