ASP.NET Core Library – Excel 读写
前言
以前写过 EPPlus 的笔记, 但后来 EPPlus 开始收费了.... (这好像是 .NET 生态的宿命)
在找替代方案中看中了微软的 Open XML SDK.
但经过一番折腾, 它确实太底层了, 学习资源又少. 于是找到了它的上层版本 ClosedXML
ClosedXML 是社区因为 Open XML 真的太底层了, 而 wrap 的上层. 它满足了绝大部分需求.
虽然它没有一直保持更新, 但已经足够小项目使用了. 非到万不得已还是不要去碰 Open XML SDK 比较好. 年纪大了少折腾自己.
以前写的笔记
ClosedXML
参考: Documentation
它的结构很简单 Book > Sheets > Sheet > Row/Column > Cell
创建 Book
var book = new XLWorkbook();
打开 Book
using var book = new XLWorkbook(@"Excel\Excel.xlsx");
创建 Sheet
var sheet = book.Worksheets.Add("Sheet1");
获取 Cell
var cell1 = sheet.Row(1).Cell(1);
var cell2 = sheet.Cell("A1");
Row(1) 是拿第一行, 没有第 0 行的哦. start from 1, column 也是一样
定义值和类型
cell.DataType = XLDataType.Text;
cell.Value = "value";
类型有 5 种
Set custom format
我的做法通常是去 excel set 然后查看 custom, 复制过来, 比如下面这个是 Accounting 的
cell.Style.NumberFormat.Format = "_ [$USD] * #,##0.00_ ;_ [$USD] * -#,##0.00_ ;_ [$USD] * \"-\"??_ ;_ @_ ";
Set hyperlink
cell.Hyperlink = new XLHyperlink(@"https://www.stooges.com.my");
Set alignment
cell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
cell.Style.Alignment.Vertical = XLAlignmentVerticalValues.Top;
Set Color
cell.Style.Font.FontColor = XLColor.Blue;
cell.Style.Fill.BackgroundColor = XLColor.FromHtml("#FF0000");
Set wrap text
cell.Style.Alignment.SetWrapText(true);
Set date format
cell.Style.DateFormat.Format = "dd-MM-yyyy";
cell.Style.DateFormat.Format = "dd-MM-yyyy hh:mm:ss AM/PM";
Set column width
sheet.Column(1).Width = 10;
10 的单位是字数 (number of characters)
Set column width / row height base on content
sheet.Column(1).AdjustToContents(10d, 20d);
sheet.Row(2).AdjustToContents(0d, 20d);
参数是 min, max (是 double 哦)
保存
book.SaveAs(@"Excel\Excel.xlsx");
book.Save();
通常新建配 SaveAs, 修改配 Save
读取 Excel
var book = new XLWorkbook(@"Excel\excel.xlsx");
if (book.TryGetWorksheet("Sheet1", out var worksheet))
{
var rows = worksheet.RowsUsed();
var headerRow = rows.First();
var dataRows = rows.Take(1..);
foreach (var row in dataRows)
{
var cells = row.Cells();
foreach (var cell in cells)
{
var value = cell.Value;
var address = cell.Address.ToString(); // A2
}
}
}
一开始折腾后来放弃的 Open XML SDK
参考:
Cell styles in OpenXML spreadsheet (SpreadsheetML)
Open XML 的结构非常绕. 很多层. 我对 Excel 的理解就是 file > sheets > sheet = table, row, column, cell
但是 Open XML 的结构是
Document 是 file
Part 是 container
SheetData 就 table
其余的我不清楚...为什么要搞这么多东东出来
Create Excel File
add nuget package
dotnet add package DocumentFormat.OpenXml
ExcelController.cs
[HttpPost("CreateExcel")]
public ActionResult CreateExcel([FromBody] CreateExcelDto dto)
{
// create doc
using var doc = SpreadsheetDocument.Create(@"Excel\Excel.xlsx", SpreadsheetDocumentType.Workbook); // create workbook part
var workbookpart = doc.AddWorkbookPart();
// create workbook
workbookpart.Workbook = new Workbook(); // create worksheet part
var worksheetPart = workbookpart.AddNewPart<WorksheetPart>(); // create sheet data
var sheetData = new SheetData();
// create header
var headerRow = new Row();
var headerCell = new Cell
{
DataType = new EnumValue<CellValues>(CellValues.String),
CellValue = new CellValue("FirstName")
};
headerRow.Append(headerCell);
sheetData.Append(headerRow); // create row
var firstRow = new Row();
var firstRowCell = new Cell
{
DataType = new EnumValue<CellValues>(CellValues.String),
CellValue = new CellValue("Derrick Yam")
};
firstRow.Append(firstRowCell);
sheetData.Append(firstRow); // create worksheet
worksheetPart.Worksheet = new Worksheet(sheetData); // create sheets
var sheets = workbookpart.Workbook.AppendChild<Sheets>(new Sheets());
// create sheet
var sheet = new Sheet()
{
Id = workbookpart.GetIdOfPart(worksheetPart), // connect sheet to worksheet part
SheetId = 1,
Name = "Sheet1"
};
sheets.Append(sheet); workbookpart.Workbook.Save();
return Ok();
}
需要注意的是它的结构很多层, 不要搞错. 顺序做就对了.
ASP.NET Core Library – Excel 读写的更多相关文章
- JavaScript日历控件开发 C# 读取 appconfig文件配置数据库连接字符串,和配置文件 List<T>.ForEach 调用异步方法的意外 ef 增加或者更新的习惯思维 asp.net core导入excel 一个二级联动
JavaScript日历控件开发 概述 在开篇之前,先附上日历的代码地址和演示地址,代码是本文要分析的代码,演示效果是本文要实现的效果代码地址:https://github.com/aspwebc ...
- Asp.Net Core 导入Excel数据到Sqlite数据库并重新导出到Excel
Asp.Net Core 导入Excel数据到Sqlite数据库并重新导出到Excel 在博文"在Asp.Net Core 使用 Sqlite 数据库"中创建了ASP.NET Co ...
- asp.net core导入excel
接昨天的导出 导入excel内容 对比昨天导出的内容增加了一行实体属性名称作为标题行,这样到转换为实体的时候才能找到对应的属性. 导入代码 public IActionResult InportExc ...
- Asp.net Core导出Excel
本篇文章是在MVC设计模式下,基于windows系统的Excel导出 1.前台的实现不用我多说了吧,加一个a标签链接地址跳到它所调用的方法里面,可以根据当前页面的查询条件去传值,从而查询出你想要的数据 ...
- 《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文!
写在开始 三年前,曾写过一篇文章:从.NET和Java之争谈IT这个行业,当时遭到某些自认为懂得java就了不起的Javaer抨击, 现在可以致敬伟大的.NET斗士甲骨文了 (JDK8以上都需要收费, ...
- 在ASP.NET Core中使用EPPlus导入出Excel文件
这篇文章说明了如何使用EPPlus在ASP.NET Core中导入和导出.xls/.xlsx文件(Excel).在考虑使用.NET处理excel时,我们总是寻找第三方库或组件.使用Open Offic ...
- ASP.NET Core 导入导出Excel xlsx 文件
ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...
- ASP.NET CORE MVC 2.0 项目中引用第三方DLL报错的解决办法 - InvalidOperationException: Cannot find compilation library location for package
目前在学习ASP.NET CORE MVC中,今天看到微软在ASP.NET CORE MVC 2.0中又恢复了允许开发人员引用第三方DLL程序集的功能,感到甚是高兴!于是我急忙写了个Demo想试试,我 ...
- 基于 ASP.NET Core 2.1 的 Razor Class Library 实现自定义错误页面的公用类库
注意:文中使用的是 razor pages ,建议使用 razor views ,使用 razor pages 有一个小坑,razor pages 会用到 {page} 路由参数,如果应用中也用到了这 ...
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...
随机推荐
- [oeasy]python017_万行代码之梦_vim环境_复制粘贴
继续运行 回忆上次内容 上次 保存运行一条龙 :w|!python3 % 我想 再多输出 几行 增加一下 代码量 可以吗? 添加图片注释,不超过 140 字(可选) 代码量 在正常模式 ...
- 阅读翻译Mathematics for Machine Learning之2.5 Linear Independence
阅读翻译Mathematics for Machine Learning之2.5 Linear Independence 关于: 首次发表日期:2024-07-18 Mathematics for M ...
- FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg
<FFmpeg开发实战:从零基础到短视频上线>一书的"第11章 FFmpeg的桌面开发"介绍了如何在Windows环境对Qt结合FFmpeg实现桌面程序,那么Win ...
- Vue 在父(子)组件引用其子(父)组件方法和属性
Vue 在父(子)组件引用其子(父)组件方法和属性 by:授客 QQ:1033553122 开发环境 Win 10 element-ui "2.8.2" Vue 2. ...
- 关于Pure中使用RnadomInteger问题的BUG
每一次连线都会造成返回值不一样相当于重新调用了一次,所以返回值需要新建变量存储来使用而不是直接用它拉两次线 下面是错误写法: 正确写法:
- 使用 useRequestEvent Hook 访问请求事件
title: 使用 useRequestEvent Hook 访问请求事件 date: 2024/7/23 updated: 2024/7/23 author: cmdragon excerpt: 摘 ...
- 机器学习:详解是否要使用端到端的深度学习?(Whether to use end-to-end learning?)
详解是否要使用端到端的深度学习? 假设正在搭建一个机器学习系统,要决定是否使用端对端方法,来看看端到端深度学习的一些优缺点,这样就可以根据一些准则,判断的应用程序是否有希望使用端到端方法. 这里是应用 ...
- python性能分析器:cProfile
代码: (1) import cProfile import re cProfile.run('re.compile("foo|bar")') 运行结果: (2) import c ...
- 【托普斯的力场】—— ARPG游戏《艾尔登法环》中的人物:托普斯
地址: https://youtube.com/shorts/oSIbOQ_r4fA?si=F-knFwjZ3iPXqPeS https://www.bilibili.com/video/BV1fV4 ...
- 国产AI训练卡,对标美国NVIDIA公司的A100,华为昇腾Atlas 300T A2(Ascend 910B4)高性能GPU/NPU/AI推理/国产计算/信创训练卡 —— 电商平台已开售
China has successfully achieved the localization of AI chips, breaking through the technological res ...