通过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