mvc手把手教你写excel导入

实习狗的每天新知识日常

准备工作:

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 <= 0)
            {
                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(0);
           System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
           for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
           {
               dt.Columns.Add(sheet.GetRow(0).Cells[j].ToString());
           }
           while (rows.MoveNext())
           {
               XSSFRow row = (XSSFRow)rows.Current;
               DataRow dr = dt.NewRow();
               for (int i = 0; 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(0);
           if (dt!=null && dt.Rows.Count != 0)
           {
               for (int i = 0; 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(0);
           System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
           for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
           {
               dt.Columns.Add(sheet.GetRow(0).Cells[j].ToString());
           }
           while (rows.MoveNext())
           {
               HSSFRow row = (HSSFRow)rows.Current;
               DataRow dr = dt.NewRow();
               for (int i = 0; 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(0);
           if (dt != null && dt.Rows.Count != 0)
           {
               for (int i = 0; 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数据库

时间: 2024-10-28 11:00:30

mvc手把手教你写excel导入的相关文章

Android开发之手把手教你写ButterKnife框架(二)

欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52664112 本文出自:[余志强的博客] 上一篇博客Android开发之手把手教你写ButterKnife框架(一)我们讲了ButterKnife是什么.ButterKnife的作用和功能介绍以及ButterKnife的实现原理. 本篇博客主要讲在android studio中如何使用apt. 一.新建个项目, 然后创建一个module名叫processor 新建m

手把手教你写Sublime中的Snippet

手把手教你写Sublime中的Snippet Sublime Text号称最性感的编辑器, 并且越来越多人使用, 美观, 高效 关于如何使用Sublime text可以参考我的另一篇文章, 相信你会喜欢上的..Sublime Text 2使用心得 现在介绍一下Snippet, Snippets are smart templates that will insert text for you and adapt it to their context. Snippet 是插入到文本中的智能模板并

手把手教你写专利申请书/怎样申请专利

手把手教你写专利申请书·怎样申请专利 摘要小前言(一)申请前的准备工作    1.申请前查询    2.其它方面的考虑    3.申请文件准备(二)填写专利申请系列文档    1.实际操作步骤    2.详细操作    3.经验分享.注意事项(三)关于费用(四)其它的话參考资源提示常见问题的问与答 摘要: 怎样写好专利申请?由于非常多专利申请人都是第一次申请,因此,可能有一种神奇和些许恐惧.本文写的是怎样写专利申请书,手把手教你写专利申请并提供申请专利时的注意事项,专利申请费用及费用减缓等相关參

手把手教你写Windows 64位平台调试器

本文网页排版有些差,已上传了doc,可以下载阅读.本文中的所有代码已打包,下载地址在此. -------------------------------------------------------------------------------------------------------------------------------------------------------------- 手写一个调试器有助于我们理解hook.进程注入等底层黑客技术具体实现,在编写过程中需要涉及大

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

系列教材: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 看完两篇,相信大家已经从开始的小菜鸟晋升为中级菜鸟了,好了,那我们就继续我们的爬虫课程. 上一课呢一定是因为对手太强,导致我们并没有完整的完成尚妆网的爬虫. 吭吭~,我们这一课继续,争取彻底搞定尚妆网,不留任何遗憾. 我们先回顾一下,上一课主要遗留了两个问题,两个问题都和ajax有关. 1.由于是ajax加载下一页,导致下一页url并不会被系统自动发现. 2.商品页面的价格是通过a

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

系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取 老规矩,爬之前首先感谢淘宝公布出这么多有价值的数据,才让我们这些爬虫们有东西可以搜集啊,不过淘宝就不用我来安利了 广大剁手党相信睡觉的时候都能把网址打出来吧. 工欲善其事,必先利其器,先上工具: 1.神箭手云爬虫,2.Chrome浏览器 3.Chrome的插件XpathHelper 不知道是干嘛的同学请移步第一课

手把手教你写电商爬虫-第五课 京东商品评论爬虫 一起来对付反爬虫

系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取 手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染 四节课过去了,咱们在爬虫界也都算见过世面的人,现在再来一些什么ajax加载之类的小鱼小虾应该不在话下了,即使是淘宝这种大量的ajax,我们 祭上我们的核武器,也轻松应对了,这一课主要是来看看除了技术上的页面处理外,我们还会遇上更棘手的问题,就是反爬虫,当然现

Android开发之手把手教你写ButterKnife框架(三)

欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52672188 本文出自:[余志强的博客] 一.概述 上一篇博客讲了,如何在android studio使用apt < Android开发之手把手教你写ButterKnife框架(二)> 然后在Processor里生成自己的代码,把要输出的类,通过StringBuilder拼接字符串,然后输出. try { // write the file JavaFileObj

手把手教你写Dockerfile, 附赠MongoDB和Nginx Dockerfile编写实例

手把手教你写Dockerfile, 附赠MongoDB和Nginx Dockerfile编写实例 基础镜像可以用于创建Docker容器.镜像可以非常基础,仅仅包含操作系统:也可以非常丰富,包含灵巧的应用栈,随时可以发布.当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层.这些基础镜像可以用于创建新的容器.本篇文章将手把手教您如何从基础镜 像,一步一步,一层一层的从Dockerfile构建容器的过程. Docker简介 Docker项目提供了构建在Linux内核