实习狗的每天新知识日常

准备工作:

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.前端页面,代码:

  1. <div class="filebtn">
  2. @using (Html.BeginForm("importexcel", "foot", FormMethod.Post, new { enctype = "multipart/form-data" }))
  3. {
  4. <samp>请选择要上传的Excel文件:</samp>
  5. <span id="txt_Path"></span>
  6. <strong>选择文件<input name="file" type="file" id="file" /></strong>@*
  7. @Html.AntiForgeryToken() //防止跨站请求伪造(CSRF:Cross-site request forgery)攻击
  8. *@<input type="submit" id="ButtonUpload" value="提交" class="offer"/>
  9. }
  10. </div>

excel

2.接下来就是控制器

  1. public class footController : Controller
  2. {
  3. //
  4. // GET: /foot/
  5. private static readonly String Folder = "/files";
  6. public ActionResult excel()
  7. {
  8. return View();
  9. }
  10.  
  11. /// 导入excel文档
  12. public ActionResult importexcel()
  13. {
  14. //1.接收客户端传过来的数据
  15. HttpPostedFileBase file = Request.Files["file"];
  16. if (file == null || file.ContentLength <= )
  17. {
  18. return Json("请选择要上传的Excel文件", JsonRequestBehavior.AllowGet);
  19. }
  20. //string filepath = Server.MapPath(Folder);
  21. //if (!Directory.Exists(filepath))
  22. //{
  23. // Directory.CreateDirectory(filepath);
  24. //}
  25. //var fileName = Path.Combine(filepath, Path.GetFileName(file.FileName));
  26. // file.SaveAs(fileName);
  27. //获取一个streamfile对象,该对象指向一个上传文件,准备读取改文件的内容
  28. Stream streamfile = file.InputStream;
  29. DataTable dt = new DataTable();
  30. string FinName = Path.GetExtension(file.FileName);
  31. if (FinName != ".xls" && FinName != ".xlsx")
  32. {
  33. return Json("只能上传Excel文档",JsonRequestBehavior.AllowGet);
  34. }
  35. else
  36. {
  37. try
  38. {
  39. if (FinName == ".xls")
  40. {
  41. //创建一个webbook,对应一个Excel文件(用于xls文件导入类)
  42. HSSFWorkbook hssfworkbook = new HSSFWorkbook(streamfile);
  43. dt = excelDAL.ImExport(dt, hssfworkbook);
  44. }
  45. else
  46. {
  47. XSSFWorkbook hssfworkbook = new XSSFWorkbook(streamfile);
  48. dt = excelDAL.ImExport(dt, hssfworkbook);
  49. }
  50. return Json("",JsonRequestBehavior.AllowGet);
  51. }
  52. catch(Exception ex)
  53. {
  54. return Json("导入失败 !"+ex.Message, JsonRequestBehavior.AllowGet);
  55. }
  56. }
  57.  
  58. }
  59.  
  60. }

footController.cs

3.业务逻辑层[excelDAL]

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using NPOI;
  7. using NPOI.SS.UserModel;
  8. using NPOI.HSSF.UserModel;
  9. using System.Data;
  10. using NPOI.XSSF.UserModel;
  11.  
  12. namespace GJL.Compoent
  13. {
  14. public class excelDAL
  15. {
  16. ///<summary>
  17. /// #region 两种不同版本的操作excel
  18. /// 扩展名*.xlsx
  19. /// </summary>
  20. public static DataTable ImExport(DataTable dt, XSSFWorkbook hssfworkbook)
  21. {
  22. NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt();
  23. System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
  24. for (int j = ; j < (sheet.GetRow().LastCellNum); j++)
  25. {
  26. dt.Columns.Add(sheet.GetRow().Cells[j].ToString());
  27. }
  28. while (rows.MoveNext())
  29. {
  30. XSSFRow row = (XSSFRow)rows.Current;
  31. DataRow dr = dt.NewRow();
  32. for (int i = ; i < row.LastCellNum; i++)
  33. {
  34. NPOI.SS.UserModel.ICell cell = row.GetCell(i);
  35. if (cell == null)
  36. {
  37. dr[i] = null;
  38. }
  39. else
  40. {
  41. dr[i] = cell.ToString();
  42. }
  43. }
  44. dt.Rows.Add(dr);
  45. }
  46. dt.Rows.RemoveAt();
  47. if (dt!=null && dt.Rows.Count != )
  48. {
  49. for (int i = ; i < dt.Rows.Count; i++)
  50. {
  51. string categary = dt.Rows[i]["页面"].ToString();
  52. string fcategary = dt.Rows[i]["分类"].ToString();
  53. string fTitle = dt.Rows[i]["标题"].ToString();
  54. string fUrl = dt.Rows[i]["链接"].ToString();
  55. FooterDAL.Addfoot(categary, fcategary, fTitle, fUrl);
  56. }
  57. }
  58. return dt;
  59. }
  60.  
  61. #region 两种不同版本的操作excel
  62. ///<summary>
  63. /// 扩展名*.xls
  64. /// </summary>
  65. public static DataTable ImExport(DataTable dt, HSSFWorkbook hssfworkbook)
  66. {
  67. // 在webbook中添加一个sheet,对应Excel文件中的sheet,取出第一个工作表,索引是0
  68. NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt();
  69. System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
  70. for (int j = ; j < (sheet.GetRow().LastCellNum); j++)
  71. {
  72. dt.Columns.Add(sheet.GetRow().Cells[j].ToString());
  73. }
  74. while (rows.MoveNext())
  75. {
  76. HSSFRow row = (HSSFRow)rows.Current;
  77. DataRow dr = dt.NewRow();
  78. for (int i = ; i < row.LastCellNum; i++)
  79. {
  80. NPOI.SS.UserModel.ICell cell = row.GetCell(i);
  81. if (cell == null)
  82. {
  83. dr[i] = null;
  84. }
  85. else
  86. {
  87. dr[i] = cell.ToString();
  88. }
  89. }
  90. dt.Rows.Add(dr);
  91. }
  92. dt.Rows.RemoveAt();
  93. if (dt != null && dt.Rows.Count != )
  94. {
  95. for (int i = ; i < dt.Rows.Count; i++)
  96. {
  97. string categary = dt.Rows[i]["页面"].ToString();
  98. string fcategary = dt.Rows[i]["分类"].ToString();
  99. string fTitle = dt.Rows[i]["标题"].ToString();
  100. string fUrl = dt.Rows[i]["链接"].ToString();
  101. FooterDAL.Addfoot(categary, fcategary, fTitle, fUrl);
  102. }
  103.  
  104. }
  105. return dt;
  106. }
  107. #endregion
  108. }
  109. }

excelDAL

  1. public static partial class FooterDAL
  2. {
  3. /// <summary>
  4. /// 添加
  5. /// </summary>
  6. /// <param name="id"></param>
  7. /// <param name="catgary"></param>
  8. /// <param name="fcatgary"></param>
  9. /// <param name="fTitle"></param>
  10. /// <param name="fUrl"></param>
  11. /// <returns></returns>
  12. public static int Addfoot(string categary, string fcategary, string fTitle, string fUrl)
  13. {
  14. string sql = string.Format("insert into Foot (categary,fcategary,fTitle,fUrl)values(@categary,@fcategary,@fTitle,@fUrl)");
  15. SqlParameter[] parm =
  16. {
  17. new SqlParameter("@categary",categary)
  18. ,new SqlParameter("@fcategary",fcategary)
  19. ,new SqlParameter("@fTitle",fTitle)
  20. ,new SqlParameter("@fUrl",fUrl)
  21. };
  22. return new DBHelperSQL<Foot>(CommonTool.dbname).ExcuteSql(sql,parm);
  23. }
  24. }

FooterDAL

//FooterDAL将datatable,就是excel里面的数据添加到sql数据库

mvc手把手教你写excel导入[mvc+三层,没用EF]的更多相关文章

  1. mvc手把手教你写excel导入

    实习狗的每天新知识日常 准备工作: 1.在项目中添加对NPOI的引用,NPOI下载地址:http://npoi.codeplex.com/releases/view/38113 2.NPOI学习系列教 ...

  2. 手把手教你写Kafka Streams程序

    本文从以下四个方面手把手教你写Kafka Streams程序: 一. 设置Maven项目 二. 编写第一个Streams应用程序:Pipe 三. 编写第二个Streams应用程序:Line Split ...

  3. 手把手教你写Sublime中的Snippet

    手把手教你写Sublime中的Snippet Sublime Text号称最性感的编辑器, 并且越来越多人使用, 美观, 高效 关于如何使用Sublime text可以参考我的另一篇文章, 相信你会喜 ...

  4. 手把手教你写LKM rookit! 之 第一个lkm程序及模块隐藏(一)

    唉,一开始在纠结起个什么名字,感觉名字常常的很装逼,于是起了个这<手把手教你写LKM rookit> 我觉得: 你们觉得:...... 开始之前,我们先来理解一句话:一切的操作都是系统调用 ...

  5. 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取

    版权声明:本文为博主原创文章,未经博主允许不得转载. 系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 看完两篇,相信大家已经从开始的 ...

  6. 手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染

    版权声明:本文为博主原创文章,未经博主允许不得转载. 系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 ...

  7. 只有20行Javascript代码!手把手教你写一个页面模板引擎

    http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...

  8. [原创]手把手教你写网络爬虫(4):Scrapy入门

    手把手教你写网络爬虫(4) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 上期我们理性的分析了为什么要学习Scrapy,理由只有一个,那就是免费,一分钱都不用花! 咦?怎么有人扔西红柿 ...

  9. [原创]手把手教你写网络爬虫(5):PhantomJS实战

    手把手教你写网络爬虫(5) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 大家好!从今天开始,我要与大家一起打造一个属于我们自己的分布式爬虫平台,同时也会对涉及到的技术进行详细介绍.大 ...

随机推荐

  1. mac下MySQL Workbench安装

    参见:http://www.cnblogs.com/macro-cheng/archive/2011/10/25/mysql-001.html 去mysql官网下载社区的.dmg安装包 分别安装: 分 ...

  2. Robolectric 单元测试中使用 Ressource

    单元测试类中: @RunWith(RobolectricGradleTestRunner.class) @Config(constants=BuildConfig.class, sdk = 21) 获 ...

  3. 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 ...

  4. Neutorn LBaaS 原理

    Load Balance as a Service(LBaaS)是 Neutron 提供的一项高级网络服务.LBaaS 允许租户在自己的网络中创建和管理 load balancer. load bal ...

  5. 黄包车比赛 python学习

    将性别进行编码: https://github.com/Bifzivkar/Boutique-Travel-Services-Predict/blob/master/feature/2_feature ...

  6. “全栈2019”Java多线程第十三章:线程组ThreadGroup详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  7. junit所需要的jar包

    hamcrest-core-1.1.jar junit-4.12.jar http://central.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/ ...

  8. 【timeisprecious】【JavaScript 】JavaScript RegExp 对象

    JavaScript>RegExp正则表达式 1 .From Runnob JavaScript RegExp 对象(概览) JavaScript RegExp 对象(教程) RegExp 对象 ...

  9. CF1110G Tree-Tac-Toe(博弈论)

    题面 传送门 题解 博弈论的前提是双方都是绝顶聪明的人 所以这种题目显然不是我应该做的 题解 //minamoto #include<bits/stdc++.h> #define R re ...

  10. HBase二级索引的设计

    摘要 最近做的一个项目涉及到了多条件的组合查询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowK ...