通过LinqToExecl和NPOI操作Execl

     项目中用到了NPOI来操作用户上传的Execl文件,这里对这部分功能做一回顾!这里将Execl文件上传到F盘,再转到E盘,代码中省略了一些验证与逻辑判断。

     先新建一个空的MVC项目,创建一个名为NPOI的控制器NPOIController,并为NPOIController添加action方法ImportExecl对传入的execl文件进行操作。通过ImportExecl来获取上传的Execl文件,并获取文件长度、内容类型、文件名等相关的数据。

        HttpPostedFileBase file = Request.Files["file"];
            var length = file.ContentLength;   //642
            var type = file.ContentType;      //application/octet-stream
            var name = file.FileName;  //e5b0a756-fb8f-45fb-9ba5-e230bd95607a_20121025120411.csv

      下来为Index方法添加Index.cshtml页面,在页面中添加以下代码,只有使用了enctype="multipart/form-data",才能完整的传递数据文件   

<form  method="post" action="@Url.Action("ImportExecl")" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="提交Execl文件" />
</form>

  现在,从前台传递Excel文件,后台的ImportExecl方法就能获取到文件了,下来就要对获取到的文件进行相关的操作。

        一、将文件保存到相应地址

        1.判断地址文件夹是否存在,不存在的话创建文件夹。 

       string path = @"F:\ImportExecl";
            bool existsPath = Directory.Exists(path);
            if (!existsPath)
                Directory.CreateDirectory(path);

            2.根据文件夹和文件名的组合地址,将文件保存到文件夹内。   

       string filePath= Path.Combine(path, name);
          file.SaveAs(filePath);

         二、对execl文件进行操作

     1.重写一个新的方法OperationExecl,通过传入的Execl地址参数获取Execl文件进行操作。   

      private void OperationExecl(string filePath){  }

             2.添加 LinqToExecl 和 NPOI 的引用,可以去nuget.org搜索。

             3.详细代码及注释

     

private void OperationExecl(string filePath)
        {
            //LinqToExecl部分       
            var execlQuery = new ExcelQueryFactory(filePath);                       //通过文件路径获取文件
            string WorksheetName = execlQuery.GetWorksheetNames().FirstOrDefault(); //得到Execl的第一个sheet的文件名
            ExcelQueryable<Row> orderRows = execlQuery.Worksheet(WorksheetName);    //获取改文件名下的数据,返回ExcelQueryable<Row>类型
            if (orderRows.Count() == 0)
                return;
            //NPOI部分
            HSSFWorkbook hssfWorkBook = new HSSFWorkbook();                         //实例化HSSFWorkbook,即一个Execl文件
            ISheet sheet0 = hssfWorkBook.CreateSheet("sheetNPOI");                  //创建名为 sheetNPOI 的 sheet
            int sheetRow = 0;
            foreach (var o in orderRows)                                            //对获取到的orderRows数据进行循环,依次添加到sheetNPOI中
            {
                IRow row = sheet0.CreateRow(sheetRow);
                int i = 0;
                while (i < o.Count)
                {
                    row.CreateCell(i).SetCellValue(o[i]);
                    i++;
                }
                sheetRow++;
            }
            //添加文件部分
            string path = @"E:\ImportExecl";
            bool existsPath = Directory.Exists(path);
            if (!existsPath)
                Directory.CreateDirectory(path);

            string fileNewPath = Path.Combine(path, DateTime.Now.ToString("yyyyMMddhhmmss")+".xls");
            FileStream fs = new FileStream(fileNewPath, FileMode.Create);
            hssfWorkBook.Write(fs);
            fs.Close();

        }

    下图可见我们在上述代码中创建的名为sheetNPOI的sheet

            

          这里对NPOI做了一个简单回顾,要了解更过关于NPOI的操作 http://tonyqus.sinaapp.com/tutorial 

          

posted @ 2013-01-03 12:15  小飞的DD  阅读(503)  评论(0编辑  收藏  举报