mvc手把手教你写excel导入[mvc+三层,没用EF]
实习狗的每天新知识日常
准备工作:
1.在项目中添加对NPOI的引用,NPOI下载地址:http://npoi.codeplex.com/releases/view/38113
2.NPOI学习系列教程推荐:http://www.cnblogs.com/tonyqus/archive/2009/04/12/1434209.html
NPOI下载,里面有五个dll,需要引用到你的项目,我这边用的mvc4+三层的方式架构的项目
我用的工具是(vs2012+sql2014)
准备工作做完,我们开始进入主题
1.前端页面,代码:
- <div class="filebtn">
- @using (Html.BeginForm("importexcel", "foot", FormMethod.Post, new { enctype = "multipart/form-data" }))
- {
- <samp>请选择要上传的Excel文件:</samp>
- <span id="txt_Path"></span>
- <strong>选择文件<input name="file" type="file" id="file" /></strong>@*
- @Html.AntiForgeryToken() //防止跨站请求伪造(CSRF:Cross-site request forgery)攻击
- *@<input type="submit" id="ButtonUpload" value="提交" class="offer"/>
- }
- </div>
excel
2.接下来就是控制器
- public class footController : Controller
- {
- //
- // GET: /foot/
- private static readonly String Folder = "/files";
- public ActionResult excel()
- {
- return View();
- }
- /// 导入excel文档
- public ActionResult importexcel()
- {
- //1.接收客户端传过来的数据
- HttpPostedFileBase file = Request.Files["file"];
- if (file == null || file.ContentLength <= )
- {
- return Json("请选择要上传的Excel文件", JsonRequestBehavior.AllowGet);
- }
- //string filepath = Server.MapPath(Folder);
- //if (!Directory.Exists(filepath))
- //{
- // Directory.CreateDirectory(filepath);
- //}
- //var fileName = Path.Combine(filepath, Path.GetFileName(file.FileName));
- // file.SaveAs(fileName);
- //获取一个streamfile对象,该对象指向一个上传文件,准备读取改文件的内容
- Stream streamfile = file.InputStream;
- DataTable dt = new DataTable();
- string FinName = Path.GetExtension(file.FileName);
- if (FinName != ".xls" && FinName != ".xlsx")
- {
- return Json("只能上传Excel文档",JsonRequestBehavior.AllowGet);
- }
- else
- {
- try
- {
- if (FinName == ".xls")
- {
- //创建一个webbook,对应一个Excel文件(用于xls文件导入类)
- HSSFWorkbook hssfworkbook = new HSSFWorkbook(streamfile);
- dt = excelDAL.ImExport(dt, hssfworkbook);
- }
- else
- {
- XSSFWorkbook hssfworkbook = new XSSFWorkbook(streamfile);
- dt = excelDAL.ImExport(dt, hssfworkbook);
- }
- return Json("",JsonRequestBehavior.AllowGet);
- }
- catch(Exception ex)
- {
- return Json("导入失败 !"+ex.Message, JsonRequestBehavior.AllowGet);
- }
- }
- }
- }
footController.cs
3.业务逻辑层[excelDAL]
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using NPOI;
- using NPOI.SS.UserModel;
- using NPOI.HSSF.UserModel;
- using System.Data;
- using NPOI.XSSF.UserModel;
- namespace GJL.Compoent
- {
- public class excelDAL
- {
- ///<summary>
- /// #region 两种不同版本的操作excel
- /// 扩展名*.xlsx
- /// </summary>
- public static DataTable ImExport(DataTable dt, XSSFWorkbook hssfworkbook)
- {
- NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt();
- System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
- for (int j = ; j < (sheet.GetRow().LastCellNum); j++)
- {
- dt.Columns.Add(sheet.GetRow().Cells[j].ToString());
- }
- while (rows.MoveNext())
- {
- XSSFRow row = (XSSFRow)rows.Current;
- DataRow dr = dt.NewRow();
- for (int i = ; i < row.LastCellNum; i++)
- {
- NPOI.SS.UserModel.ICell cell = row.GetCell(i);
- if (cell == null)
- {
- dr[i] = null;
- }
- else
- {
- dr[i] = cell.ToString();
- }
- }
- dt.Rows.Add(dr);
- }
- dt.Rows.RemoveAt();
- if (dt!=null && dt.Rows.Count != )
- {
- for (int i = ; i < dt.Rows.Count; i++)
- {
- string categary = dt.Rows[i]["页面"].ToString();
- string fcategary = dt.Rows[i]["分类"].ToString();
- string fTitle = dt.Rows[i]["标题"].ToString();
- string fUrl = dt.Rows[i]["链接"].ToString();
- FooterDAL.Addfoot(categary, fcategary, fTitle, fUrl);
- }
- }
- return dt;
- }
- #region 两种不同版本的操作excel
- ///<summary>
- /// 扩展名*.xls
- /// </summary>
- public static DataTable ImExport(DataTable dt, HSSFWorkbook hssfworkbook)
- {
- // 在webbook中添加一个sheet,对应Excel文件中的sheet,取出第一个工作表,索引是0
- NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt();
- System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
- for (int j = ; j < (sheet.GetRow().LastCellNum); j++)
- {
- dt.Columns.Add(sheet.GetRow().Cells[j].ToString());
- }
- while (rows.MoveNext())
- {
- HSSFRow row = (HSSFRow)rows.Current;
- DataRow dr = dt.NewRow();
- for (int i = ; i < row.LastCellNum; i++)
- {
- NPOI.SS.UserModel.ICell cell = row.GetCell(i);
- if (cell == null)
- {
- dr[i] = null;
- }
- else
- {
- dr[i] = cell.ToString();
- }
- }
- dt.Rows.Add(dr);
- }
- dt.Rows.RemoveAt();
- if (dt != null && dt.Rows.Count != )
- {
- for (int i = ; i < dt.Rows.Count; i++)
- {
- string categary = dt.Rows[i]["页面"].ToString();
- string fcategary = dt.Rows[i]["分类"].ToString();
- string fTitle = dt.Rows[i]["标题"].ToString();
- string fUrl = dt.Rows[i]["链接"].ToString();
- FooterDAL.Addfoot(categary, fcategary, fTitle, fUrl);
- }
- }
- return dt;
- }
- #endregion
- }
- }
excelDAL
- public static partial class FooterDAL
- {
- /// <summary>
- /// 添加
- /// </summary>
- /// <param name="id"></param>
- /// <param name="catgary"></param>
- /// <param name="fcatgary"></param>
- /// <param name="fTitle"></param>
- /// <param name="fUrl"></param>
- /// <returns></returns>
- public static int Addfoot(string categary, string fcategary, string fTitle, string fUrl)
- {
- string sql = string.Format("insert into Foot (categary,fcategary,fTitle,fUrl)values(@categary,@fcategary,@fTitle,@fUrl)");
- SqlParameter[] parm =
- {
- new SqlParameter("@categary",categary)
- ,new SqlParameter("@fcategary",fcategary)
- ,new SqlParameter("@fTitle",fTitle)
- ,new SqlParameter("@fUrl",fUrl)
- };
- return new DBHelperSQL<Foot>(CommonTool.dbname).ExcuteSql(sql,parm);
- }
- }
FooterDAL
//FooterDAL将datatable,就是excel里面的数据添加到sql数据库
mvc手把手教你写excel导入[mvc+三层,没用EF]的更多相关文章
- mvc手把手教你写excel导入
实习狗的每天新知识日常 准备工作: 1.在项目中添加对NPOI的引用,NPOI下载地址:http://npoi.codeplex.com/releases/view/38113 2.NPOI学习系列教 ...
- 手把手教你写Kafka Streams程序
本文从以下四个方面手把手教你写Kafka Streams程序: 一. 设置Maven项目 二. 编写第一个Streams应用程序:Pipe 三. 编写第二个Streams应用程序:Line Split ...
- 手把手教你写Sublime中的Snippet
手把手教你写Sublime中的Snippet Sublime Text号称最性感的编辑器, 并且越来越多人使用, 美观, 高效 关于如何使用Sublime text可以参考我的另一篇文章, 相信你会喜 ...
- 手把手教你写LKM rookit! 之 第一个lkm程序及模块隐藏(一)
唉,一开始在纠结起个什么名字,感觉名字常常的很装逼,于是起了个这<手把手教你写LKM rookit> 我觉得: 你们觉得:...... 开始之前,我们先来理解一句话:一切的操作都是系统调用 ...
- 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取
版权声明:本文为博主原创文章,未经博主允许不得转载. 系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 看完两篇,相信大家已经从开始的 ...
- 手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染
版权声明:本文为博主原创文章,未经博主允许不得转载. 系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 ...
- 只有20行Javascript代码!手把手教你写一个页面模板引擎
http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...
- [原创]手把手教你写网络爬虫(4):Scrapy入门
手把手教你写网络爬虫(4) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 上期我们理性的分析了为什么要学习Scrapy,理由只有一个,那就是免费,一分钱都不用花! 咦?怎么有人扔西红柿 ...
- [原创]手把手教你写网络爬虫(5):PhantomJS实战
手把手教你写网络爬虫(5) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 大家好!从今天开始,我要与大家一起打造一个属于我们自己的分布式爬虫平台,同时也会对涉及到的技术进行详细介绍.大 ...
随机推荐
- mac下MySQL Workbench安装
参见:http://www.cnblogs.com/macro-cheng/archive/2011/10/25/mysql-001.html 去mysql官网下载社区的.dmg安装包 分别安装: 分 ...
- Robolectric 单元测试中使用 Ressource
单元测试类中: @RunWith(RobolectricGradleTestRunner.class) @Config(constants=BuildConfig.class, sdk = 21) 获 ...
- Codeforces Beta Round #75 (Div. 1 Only) B. Queue 二分
B. Queue Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 codeforces.com/problemset/problem/91/B Descrip ...
- Neutorn LBaaS 原理
Load Balance as a Service(LBaaS)是 Neutron 提供的一项高级网络服务.LBaaS 允许租户在自己的网络中创建和管理 load balancer. load bal ...
- 黄包车比赛 python学习
将性别进行编码: https://github.com/Bifzivkar/Boutique-Travel-Services-Predict/blob/master/feature/2_feature ...
- “全栈2019”Java多线程第十三章:线程组ThreadGroup详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- junit所需要的jar包
hamcrest-core-1.1.jar junit-4.12.jar http://central.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/ ...
- 【timeisprecious】【JavaScript 】JavaScript RegExp 对象
JavaScript>RegExp正则表达式 1 .From Runnob JavaScript RegExp 对象(概览) JavaScript RegExp 对象(教程) RegExp 对象 ...
- CF1110G Tree-Tac-Toe(博弈论)
题面 传送门 题解 博弈论的前提是双方都是绝顶聪明的人 所以这种题目显然不是我应该做的 题解 //minamoto #include<bits/stdc++.h> #define R re ...
- HBase二级索引的设计
摘要 最近做的一个项目涉及到了多条件的组合查询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowK ...