使用ClosedXML实现Excel导入导出

news/2025/1/5 6:44:28/文章来源:https://www.cnblogs.com/ssz0312/p/18648776

使用ClosedXML实现Excel导入导出

写在开头

游览Dotnet 基金会中的项目时,发现了这个库,Github 链接,它的性能非常好,详细见下图

截屏2025-01-02 20.30.29

话不多说,直接上代码吧!

导出

后端:
public static byte[] Output<T>(List<T> data,  string sheetName) {using var workbook = new XLWorkbook();var worksheet = workbook.Worksheets.Add(sheetName);var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);//表头for (int i = 0; i < properties.Length; i++){worksheet.Cell(1, i + 1).Value = properties[i].Name;}//值for (int row = 0; row < data.Count; row++){for (int col = 0; col < properties.Length; col++){var value = properties[col].GetValue(data[row], null);worksheet.Cell(row + 2, col + 1).Value = value?.ToString()??"" ;}}//保存至内存流using var ms = new MemoryStream();workbook.SaveAs(ms);ms.Position = 0;return ms.ToArray();}
[HttpGet("output")]public async Task<IActionResult> Output(){var data =new{字段1=1,字段2=“2”};return File(ExcelHelper.Output(data,“标题”), "application/octet-stream", "output.xls");}
前端:
export function fileDownAction(url, parameter) {return request({//axiosurl: url,method: 'get',params: parameter,responseType: 'blob'})
}
let timeStamp = Date.parse(new Date()).toString().substring(0, 10)
fileDownAction(url + "/output", params).then((res) => {// 处理返回的文件流let url = window.URL.createObjectURL(new Blob([res]))let link = document.createElement('a')link.style.display = 'none'link.href = urllink.setAttribute('download', fileName + timeStamp + ".xls")document.body.appendChild(link)link.click()})

导入

后端:
public static async Task<IXLWorksheet> CreateTableAsync(IFormFile file){var ms = new MemoryStream();await file.CopyToAsync(ms);ms.Position = 0;var workbook = new XLWorkbook(ms);// 获取第一个工作表return workbook.Worksheet(1);}
//根据位置获取单元格的值
public static string GetCellValue(IXLWorksheet worksheet,string address){return worksheet.Cell(address).Value.ToString();//“B12”//return worksheet.Cell(row,column).Value.ToString(); }
//根据值获取单元格地址
public static IXLAddress GetCellAddress(IXLWorksheet worksheet,string cellName){return  worksheet.CellsUsed(a=>a.Value.ToString()==cellName).First().Address;// 以下返回“B12”此类字符串//worksheet.CellsUsed(a=>a.Value.ToString()==cellName).First().ToString();}

前端代码我就不贴了,传入一个file对象即可

写在最后

如果觉得该库好用,可以去github点个star哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/863093.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

离线环境一步部署OCR文字识别程序

前言 百度、阿里等的OCR接口需要联网环境,并且超过免费/试用次数后需要付费。一般政务项目因为信息安全要求都部署在独立内网,有没有离线免费的OCR实现方案?下文基于EasyOCR实现一步部署,可下载直接使用。 EasyOCR EasyOCR支持离线部署,可免费使用(支持Apache-2.0 licens…

昆明理工大学25届MBA复试资料

昆明理工大学25届MBA复试资料介绍 昆明理工大学MBA工商管理考研复试群:679724235 作者:唐维康 QQ1352517362 包含内容 全部内容如下:01、往年面试真题分为了专业知识问答、英语口语、社会类问题、综合面试问题四类,为去年上岸的面试题。02、专业英语词汇05、MBA复试1V1辅导课…

Alexander ——2024年报

Alexander ——2024年报Alexander ——2024年报 小总结 知己知彼,百战不殆。2024下半年找到了自己学习的方向,也认识很多的师傅,深入领域学习,无时不刻不在CTF的路上,逐渐建立一个完整的知识库体系。 今年的成长变化与进步 所学习的知识 Misc大部分编码体制皮亚诺夫曲线,希伯…

2025 多校冲刺省选模拟赛 1

第一次!输输输!2025 多校冲刺省选模拟赛 1 切割蛋糕(cake) 签到题 本质上是求 \(a\) 序列最小满足所有前缀平均值均大于全局平均值的循环位移,考虑 Raney 引理,找到斜率 \(\dfrac{s}{n}\) 所经过截距最小的点,易知没有无解情况。 时间复杂度 \(O(n)\)。 游乐园(park) …

IntelliJ IDEA 2024 安装激活详细使用教程(激活至2026,实测是永久,亲测!)

开发工具推荐:IntelliJ IDEA 2024 安装激活详细使用教程(激活至2026,实际上永久,亲测!)申明:本教程 IntelliJ IDEA补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版 !卸载老版本 IDEA 首先,如果小伙伴的…

文件及文件夹的对比工具:Beyond Compare v5.0修改版(无需手动激活)

前言 Beyond Compare是一款文件及文件夹(目录)的对比工具。Beyond Compare不仅可以快速比较出两个目录的不同,还可以比较每个文件的内容,而且可以任意显示比较结果。Beyond Compare程序内建了文件浏览器,方便您对文件、文件夹、压缩包、FTP网站之间的差异比对以及资料同步…

LGV 引理

无。LGV 引理 概述 参考 OI Wiki Lindstrm–Gessel–Viennot lemma,即 LGV 引理,可以用来处理有向无环图上不相交路径计数等问题。 引理定义方阵 \(M\)。结论是: \[\det(M) = \sum_{S:A\to B} (-1)^{sgn(\sigma(S))} \prod_{i=1}^n \omega(S_i) \]其中 \(S:A\to B\) 表示不相…

【python复习随记】

缩进要对多行语句:使用反斜杠\ total = item_one + \item_two + \item_three在 [], {}, 或 () 中的多行语句,不需要使用反斜杠 \ total = [item_one, item_two, item_three,item_four, item_five]复数complex a+bj : a实部 b虚部 j虚数单位 字符串 (1)多行字符串:三引号( …

windows11连接蓝牙耳机声音差的解决方案

前期在使用Windows 10时,我的XM3通常是有Hands Free和正常输出两个通道的,走Hands Free通道则会触发通话模式,可以自己调整以适应不同的需求。 但是升级到Windows 11后,发现只剩下了一个耳机输出通道,但是音质直接降为通话音质,多次升降级无果,调整音质选项也没有作用。…

【政策解读】《电力监控系统安全防护规定》今日施行!

《电力监控系统安全防护规定》旨在提升电力监控系统的安全性和可靠性,确保电力系统的安全稳定运行。今日起施行,主要内容: 1、总则:《电力监控系统安全防护规定》旨在强化电力监控系统安全防护,保障电力系统安全稳定运行。规定适用于中国境内的电力监控系统运营者及相关单…

同硕计算机专业考研必备:统考+课程学习资料大放送!

同硕计算机,统考,课程学习,源码资料考研之路,道阻且长。对于计算机专业的学子来说,备考之路更是充满挑战。为了帮助广大考生高效备战,我在此精心整理了一套同硕计算机专业统考及课程学习资料,并免费分享给大家! 一、资料亮点:1. 同硕-计算机专业-统考历年真题,全部免…

【有源码】医院挂号系统+SpringBoot+VUE+前后端分离

学弟,学妹好,我是爱学习的学姐,今天带来一款优秀的项目:医院挂号系统。 本文介绍了系统功能与部署安装步骤,如果您有任何问题,也请联系学姐,偶现在是经验丰富的程序员! 一. 系统演示 管理后台-截图 前端-截图视频演示 https://githubs.xyz/show/329.mp4二. 系统概述 【…