应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

.net core导入导出excel。下载excel。上传文件与下载文件。下载内存中构建的文件

3252人阅读 2018/5/9 11:12 总访问:5193924 评论:0 收藏:0 手机
分类: .NET Core

使用的是npoi先下载依赖

  1. <PackageReference Include="NPOI" Version="2.5.6" />

.net core导入excel

其实就是excel的上传和读取的问题

  1. public ActionResult UpLoadExcel()
  2. {
  3. string filePath = "";
  4. try
  5. {
  6. IFormFileCollection cols = Request.Form.Files;
  7. if (cols == null || cols.Count == 0)
  8. {
  9. return Content("没有上传文件");
  10. }
  11. foreach (IFormFile file in cols)
  12. {
  13. //定义可以接收的文件类型数组后缀格式
  14. string[] LimitPictureType = { ".XLS" };
  15. //获取图片后缀是否存在数组中
  16. string currentPictureExtension = Path.GetExtension(file.FileName).ToUpper();
  17. if (LimitPictureType.Contains(currentPictureExtension))
  18. {
  19. string guid = Guid.NewGuid().ToString().Replace("-", "");
  20. // var new_path = DateTime.Now.ToString("yyyyMMdd")+ file.FileName;
  21. var new_path = Path.Combine("excelupload/", guid + file.FileName);
  22. filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", new_path);
  23. //这步之前最好做一下文件夹是否存在的判断,如果不存在就创建一下
  24. using (var stream = new FileStream(filePath, FileMode.Create))
  25. {
  26. file.CopyTo(stream);
  27. stream.Flush();
  28. }
  29. }
  30. else
  31. {
  32. return Content("请上传指定格式的文件");
  33. }
  34. }
  35. }
  36. catch (Exception ex)
  37. {
  38. return Content("上传文件出错");
  39. }
  40. //打开excel所在的位置
  41. FileStream getStream = new FileStream(filePath, FileMode.Open);
  42. //获取excel
  43. HSSFWorkbook workbook = new HSSFWorkbook(getStream);
  44. //获取excel中的表
  45. HSSFSheet sheet = workbook.GetSheetAt(0) as HSSFSheet;
  46. ////获取行
  47. //HSSFRow row = sheet.GetRow(0) as HSSFRow;
  48. ////获取列
  49. //HSSFCell cell = row.GetCell(0) as HSSFCell;
  50. //string str = cell.StringCellValue;
  51. List<WacUsers> wacUsersList = new List<WacUsers>();
  52. if (sheet.LastRowNum == 0 || sheet.LastRowNum == 1)
  53. {
  54. return Content("上传的excel表中数据为空");
  55. }
  56. //遍历行
  57. for (int i = 1; i <= sheet.LastRowNum; i++)
  58. {
  59. WacUsers wacUsers = new WacUsers();
  60. HSSFRow itemrow = sheet.GetRow(i) as HSSFRow;
  61. string username = itemrow.GetCell(0).StringCellValue;
  62. string nickname = itemrow.GetCell(1).StringCellValue;
  63. int utype = 2;
  64. try
  65. {
  66. utype = Convert.ToInt32(itemrow.GetCell(2).NumericCellValue);
  67. }
  68. catch (Exception ex)
  69. {
  70. return Content("用户类型输入错误,只能输入数字1表示管理员,2表示普通用户");
  71. }
  72. wacUsers.username = username;
  73. //初始密码123456
  74. wacUsers.userpassword = "123456";
  75. wacUsers.nickname = nickname;
  76. wacUsers.utype = utype;
  77. wacUsersList.Add(wacUsers);
  78. }
  79. foreach (WacUsers item in wacUsersList)
  80. {
  81. WacUsersDAL wacUsersDAL = new WacUsersDAL();
  82. int count = wacUsersDAL.Add(item);
  83. }
  84. return RedirectToAction("Index", "WacUser");
  85. }

.net core导出excel

其实就是内存中构建好excel然后在下载内存中构建的excel

  1. public void OutPutExcel()
  2. {
  3. //在内存中构建一个excel
  4. HSSFWorkbook workbook = new HSSFWorkbook();
  5. //在创建一个excel的表
  6. HSSFSheet sheet = workbook.CreateSheet("用户信息表") as HSSFSheet;
  7. //创建行
  8. HSSFRow row = sheet.CreateRow(0) as HSSFRow;
  9. //创建列(填充数据)
  10. row.CreateCell(0).SetCellValue("编号");
  11. row.CreateCell(1).SetCellValue("用户");
  12. //HSSFCell cell = row.CreateCell(1) as HSSFCell;
  13. //cell.SetCellValue("用户名");
  14. row.CreateCell(2).SetCellValue("昵称");
  15. row.CreateCell(3).SetCellValue("类型");
  16. //合并单元格(合并第一行的第1列到第3列)
  17. //sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 1, 3));
  18. ////合并单元格(合并行,合并第一行的第2到4列)
  19. //sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, 4, 0, 0));
  20. //创建一个样式类
  21. HSSFCellStyle cellstyle = workbook.CreateCellStyle() as HSSFCellStyle;
  22. //水平居中
  23. cellstyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
  24. //垂直居中
  25. cellstyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
  26. //cell.CellStyle = cellstyle;
  27. WacUsersDAL wacUsersDAL = new WacUsersDAL();
  28. List<WacUsers> wacUsers = wacUsersDAL.GetAllWacUsers(null);
  29. int rowNumber = 1;
  30. foreach (WacUsers item in wacUsers)
  31. {
  32. HSSFRow rowContent = sheet.CreateRow(rowNumber) as HSSFRow;
  33. //创建列(填充数据)
  34. rowContent.CreateCell(0).SetCellValue(item.uid);
  35. rowContent.CreateCell(1).SetCellValue(item.username);
  36. //HSSFCell cell = row.CreateCell(1) as HSSFCell;
  37. //cell.SetCellValue("用户名");
  38. rowContent.CreateCell(2).SetCellValue(item.nickname);
  39. rowContent.CreateCell(3).SetCellValue(item.utypeName);
  40. rowNumber++;
  41. }
  42. //把内存流做为文件下载中转
  43. MemoryStream memoryStream = new MemoryStream();
  44. workbook.Write(memoryStream);
  45. //Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
  46. Response.ContentType = "application/octet-stream;charset=UTF-8"; ;
  47. string newName = Guid.NewGuid().ToString().Replace("-", "");
  48. Response.Headers.Add("Content-Disposition", "attachment;filename=" + WebUtility.UrlEncode("用户信息表.xls"));
  49. //Response.Headers.Add("Content-Disposition", "attachment;filename=用户信息表.xls");
  50. Response.BodyWriter.WriteAsync(memoryStream.ToArray());
  51. Response.BodyWriter.FlushAsync();
  52. }

根据模板导出Excel

先读取模板,然后在模板的基础上填充数据

  1. /// <summary>
  2. /// 根据模板导出
  3. /// </summary>
  4. /// <param name="fileId"></param>
  5. public void DownloadContentByTemplate(int? fileId)
  6. {
  7. /* 先读取模板 */
  8. string baseDir = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot");
  9. string filePath = baseDir + "/template/filetemplate.xls";
  10. FileStream fileTemplate = new FileStream(filePath, FileMode.Open, FileAccess.Read);
  11. HSSFWorkbook hssfworkbook = new HSSFWorkbook(fileTemplate);
  12. HSSFSheet sheet = (HSSFSheet)hssfworkbook.GetSheetAt(0);
  13. /* 然后在模板的基础上填充数据 */
  14. for (int i = 3; i < 10; i++)
  15. {
  16. HSSFRow row = sheet.CreateRow(i) as HSSFRow;
  17. row.Height = 700;
  18. for (int j = 0; j < 8; j++)
  19. {
  20. HSSFCell cell = row.CreateCell(j) as HSSFCell;
  21. //创建一个样式类
  22. HSSFCellStyle cellstyle = hssfworkbook.CreateCellStyle() as HSSFCellStyle;
  23. //水平居中
  24. cellstyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
  25. //垂直居中
  26. cellstyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
  27. cell.SetCellValue("富婆" + i * j);
  28. cell.CellStyle = cellstyle;
  29. }
  30. }
  31. /* 在把填充好的数据下载即可 */
  32. MemoryStream memoryStream = new MemoryStream();
  33. hssfworkbook.Write(memoryStream);
  34. //Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
  35. Response.ContentType = "application/octet-stream;charset=UTF-8"; ;
  36. string newName = Guid.NewGuid().ToString().Replace("-", "");
  37. Response.Headers.Add("Content-Disposition", "attachment;filename=" + WebUtility.UrlEncode("用户信息表.xls"));
  38. //Response.Headers.Add("Content-Disposition", "attachment;filename=用户信息表.xls");
  39. Response.BodyWriter.WriteAsync(memoryStream.ToArray());
  40. Response.BodyWriter.FlushAsync();
  41. }

下载excel的模板文件

和下载内存中构建的文件不一样,这个是下载已经存在的文件

  1. /// <summary>
  2. /// 下载excel的模板文件
  3. /// </summary>
  4. /// <returns></returns>
  5. public IActionResult OutPutTemp()
  6. {
  7. var filePath = "/exceltemp/users.xls";
  8. var fileName = "users.xls";
  9. /* FileStream fs = new FileStream(_webHostEnvironment.WebRootPath + filePath, FileMode.OpenOrCreate);
  10. fs.Close();*/
  11. return File(new FileStream(_webHostEnvironment.WebRootPath + filePath, FileMode.Open),
  12. "application/octet-stream", fileName);
  13. }

路径也可以这样写:

  1. /// <summary>
  2. /// 模板下载
  3. /// </summary>
  4. /// <returns></returns>
  5. public FileResult DownloadTemplate()
  6. {
  7. string baseDir = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot");
  8. string filePath = baseDir + "/template/filetemplate.xls";
  9. string fileName = "filetemplate.xls";
  10. return File(new FileStream(filePath, FileMode.Open),
  11. "application/octet-stream", fileName);
  12. }

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

.net core 使用 Kestrel

Kestrel介绍 Kestrel是一个基于libuv的跨平台web服务器 在.net core项目中就可以不一定要发布在iis下面了Kestrel体验可以使...

net core中使用cookie

net core中可以使用传统的cookie也可以使用加密的cookieNET CORE中使用传统cookie设置:HttpContext.Response.Cookies.Appe...

net core项目结构简单分析

一:wwwrootwwwroot用于存放网站的静态资源,例如css,js,图片与相关的前端插件等lib主要是第三方的插件,例如微软默认引用...

net core使用EF之DB First

一.新建一个.net core的MVC项目新建好项目后,不能像以前一样直接在新建项中添加ef了,需要用命令在添加ef的依赖二.使用Nug...

.net core使用requestresponse下载文件下载excel等

使用request获取内容net core中request没有直接的索引方法,需要点里边的Query,或者formstringbase64=Request.Form[&quot;f...

iframe自适应高度与配合net core使用

去掉iframe边框frameborder=&quot;0&quot;去掉滚动条scrolling=&quot;no&quot;iframe 自适应高度如果内容是固定的,那么就...

net core启动报错Unable to configure HTTPS endpoint. No server certificate was specified

这是因为net core2.1默认使用的https,如果使用Kestrel web服务器的话没有安装证书就会报这个错其实仔细看他的错误提示,其...

net core中使用url编码与解码操作

net core中暂时还没有以前asp.net与mvc中的server对象。获取url的编码与解码操作不能使用以前的server对象来获取。使用的是...

下载net core

官方下载地址:https://dotnet.microsoft.com/download 进来之后就可以看到最新的下载版本可以直接点击下载,也可以下载其...

net core使用依赖注入来装载EF的上下文对象

妹子情人节快乐~.net core中用了不少的依赖注入,官方文档中也推荐使用。这样使用依赖注入来管理ef对象,还是比较科学,比如...