EPPlus 已经支持 .net core 了

https://www.nuget.org/packages/EPPlus

https://github.com/JanKallman/EPPlus

refer: https://stackoverflow.com/questions/40209636/epplus-number-format/40214134 常用 format

note: excel datetimeoffset 不支持的

写入 excel

public async Task<IActionResult> About()
{
ViewData["Message"] = "Your application description page.";
var products = new List<Product>
{
new Product
{
name = "mk100",
date = DateTime.Now,
amount = 99.33,
published = false,
sort =
},
new Product
{
name = "mk200",
date = DateTime.Now,
amount = 99.33,
published = true,
sort =
}
}; byte[] responseBytes;
string path = Path.Combine(HostingEnvironment.WebRootPath, "excel", "abc.xlsx");
using (var package = new ExcelPackage())
{
// Add a new worksheet to the empty workbook
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Inventory");
// 2 种方式做 select
// - 从新创建想要的对象 (比较灵活)
// - 通过 memberInfoes 选出要的
//var memberInfoes = "name,date,amount,published,sort".Split(',').Select(v => typeof(Product).GetProperty(v)).ToArray();
var datas = products.Select(p => new
{
p.name,
p.date
}); worksheet.Cells["A1"].LoadFromCollection(
datas,
true,
TableStyles.None
//BindingFlags.Public,
//memberInfoes
); // 弄 date/datetime format
using (var cellRanges = worksheet.Cells[$"B2:B{datas.Count() + 1}"])
{
cellRanges.Style.Numberformat.Format = "yyyy-mm-dd";
} //Add the headers
//worksheet.Cells[1, 1].Value = "String";
//worksheet.Cells[1, 2].Value = "Int";
//worksheet.Cells[1, 3].Value = "Double";
//worksheet.Cells[1, 4].Value = "Boolean";
//worksheet.Cells[1, 5].Value = "Date"; //worksheet.Cells[2, 1].Value = "dasd";
//worksheet.Cells[2, 2].Value = 12312;
//worksheet.Cells[2, 3].Value = 123.123123;
//worksheet.Cells[2, 4].Value = true;
//worksheet.Cells[2, 5].Value = DateTime.Now;
//worksheet.Cells[2, 5].Style.Numberformat.Format = "yyyy-mm-dd"; //worksheet.Cells["C2:C5"].Style.Numberformat.Format = "#,##0";
//worksheet.Cells["D2:E5"].Style.Numberformat.Format = "#,##0.00"; worksheet.Cells.AutoFitColumns(); //Autofit columns for all cells
System.IO.File.Delete(path); // note package.SaveAs 和 package.GetAsByteArray() 不能一起用
// 用了一个另一个就不能用了,通常我们是选其中一个用而已啦,很少 2 个都需要的
// 解决方法很简单,用 byte 然后 file stream 写 bytes 进去 responseBytes = package.GetAsByteArray();
using (var fs = System.IO.File.Create(path))
{
await fs.WriteAsync(responseBytes);
//package.SaveAs(fs);
}
} //return File(responseBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx"); return File(await System.IO.File.ReadAllBytesAsync(path), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx");
}

读 excel

public IActionResult Contact()
{
var path = Path.Combine(HostingEnvironment.WebRootPath, "excel", "abc.xlsx");
using (var fs = System.IO.File.Open(path, FileMode.Open, FileAccess.Read))
using (var package = new ExcelPackage(fs))
{
var worksheet = package.Workbook.Worksheets["Inventory"]; var sc = worksheet.Dimension.Start.Column;
var ec = worksheet.Dimension.End.Column;
var sr = worksheet.Dimension.Start.Row;
var er = worksheet.Dimension.End.Row;
var value = worksheet.Cells[sc, sr + ].Value;
} ViewData["Message"] = "Your contact page."; return View();
}

Asp.net core 学习笔记 (Excel 读写)的更多相关文章

  1. Asp.Net Core学习笔记:入门篇

    Asp.Net Core 学习 基于.Net Core 2.2版本的学习笔记. 常识 像Django那样自动检查代码更新,自动重载服务器(太方便了) dotnet watch run 托管设置 设置项 ...

  2. ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探

    前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...

  3. ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项

    前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...

  4. Asp.net Core学习笔记

    之前记在github上的,现在搬运过来 变化还是很大的,感觉和Nodejs有点类似,比如中间件的使用 ,努力学习ing... 优点 不依赖IIS 开源和跨平台 中间件支持 性能优化 无所不在的依赖注入 ...

  5. ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用

    前言 首先感谢小可爱门的支持,写了这个系列的第二篇后,得到了好多人的鼓励,也更加坚定我把这个系列写完的决心,也能更好的督促自己的学习,分享自己的学习成果.还记得上篇文章中最后提及到,假如服务越来越多怎 ...

  6. ASP.NET Core 学习笔记 第四篇 ASP.NET Core 中的配置

    前言 说道配置文件,基本大多数软件为了扩展性.灵活性都会涉及到配置文件,比如之前常见的app.config和web.config.然后再说.NET Core,很多都发生了变化.总体的来说技术在进步,新 ...

  7. Asp.net core 学习笔记 ( Data protection )

    参考 : http://www.cnblogs.com/xishuai/p/aspnet-5-identity-part-one.html http://cnblogs.com/xishuai/p/a ...

  8. Asp.net core 学习笔记 SignalR

    refer : https://kimsereyblog.blogspot.com/2018/07/signalr-with-asp-net-core.html https://github.com/ ...

  9. Asp.net core (学习笔记 路由和语言 route & language)

    https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-2.1 https://doc ...

随机推荐

  1. TCP/IP编程——基于TCP的半关闭

    在TCP服务端和客户端建立连接之后服务端和客户端会分别有两个独立的输入流和输出流,而且相互对应.服务端的输出流对应于客户端的输入流,服务端的输入流对应于客户端的输出流.这是在建立连接之后的状态. 当我 ...

  2. 【题解】Luogu P3217 [HNOI2011]数矩形

    原题链接:P3217 [HNOI2011]数矩形 什么??!怎么又是计算几何,您钛毒瘤了-- 这道题真的是毒瘤 凸包?旋转卡壳? 看一下数据,N<=1500? 暴力 没错,就是暴力,N^2没毛病 ...

  3. python之路-day1-while循环

    while Thue: (条件为真无限循环)  break(跳出循环) 猜年龄: #Author:zwwage_of_jay = 40count = 0while count < 3: gues ...

  4. DL_WITH_PY系统学习(第2章)

    ​ 本节提示: 1.第一个dl例子: 2.tensor和tensor操作: 3.DL如何通过逆向传播和梯度下降达到学习目的. 2.1 输入数据集的格式 ,*,))) network.add(layer ...

  5. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem F (Codeforces 831F) - 数论 - 暴力

    题目传送门 传送门I 传送门II 传送门III 题目大意 求一个满足$d\sum_{i = 1}^{n} \left \lceil \frac{a_i}{d} \right \rceil - \sum ...

  6. css-过渡

    css过渡:元素从一种样式逐渐改变为另一种的效果.过渡所需的条件:1.所过渡的元素必须有css样式.2.必须有过渡时间.以下是过渡元素的属性:transition:简写属性,用于在一个属性中设置四个过 ...

  7. 牛客网校招全国统一模拟笔试(二月场)- Java方向

    1.请问下面关于与wait()一起使用的方法notify()的各种陈述,哪个正确? A 多个线程同时等待某个条件,则只有等待时间最长的哪个线程被通知 B 多个线程同时等待某条件,则没有办法预测哪个线程 ...

  8. 标签无效 "/zabbix_export/date": "YYYY-MM-DDThh:mm:ssZ" 预计。

    Centos7.5 使用导入percona模板的时候报错 百度给的解决方案是 将zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1. ...

  9. vue学习【第七篇】:Vue之导入Bootstrap

    Vue引入bootstrap主要有两种方法 方法一:在main.js中引入 此方法导入的bootstrap中对于html,body的一些预设置的css样式可能无效 引入jQuery 在当前项目的目录下 ...

  10. Elasticsearch查询Index以及删除

    查询Index信息 GET /bank HTTP/1.1Host: localhost:9200 { "bank": { "aliases": {}, &quo ...