EPPlus 读取和生成Excel

在项目中添加了EPPlus库的引用,你可以通过NuGet包管理器或手动将EPPlus库添加到项目中。同时,需要注意的是EPPlus库支持的是xlsx格式的Excel文件。

读取

使用EPPlus读取本地Excel文件的示例代码如下:

using OfficeOpenXml;public void ReadExcel()
{// 读取文件路径string filePath = "path_to_your_excel_file.xlsx";// 创建一个新的ExcelPackage对象using (ExcelPackage package = new ExcelPackage(new FileInfo(filePath))){// 获取第一个工作表ExcelWorksheet worksheet = package.Workbook.Worksheets[0];// 获取Excel中的行数和列数int rowCount = worksheet.Dimension.Rows;int columnCount = worksheet.Dimension.Columns;// 遍历每一行for (int row = 1; row <= rowCount; row++){// 遍历每一列for (int col = 1; col <= columnCount; col++){// 通过索引获取单元格值var cellValue = worksheet.Cells[row, col].Value;// 在这里进行进一步的处理,比如将数据存储到集合中// ...}}}
}

请注意替换代码中的"path_to_your_excel_file.xlsx"为你的本地Excel文件的路径。这个示例代码打开一个Excel文件,读取第一个工作表的所有单元格,并对每个单元格的值进行处理。你可以根据自己的需求在遍历过程中进行相应的操作,比如将数据存储到集合中。

生成

下面是一个示例代码,演示如何在.NET Core中使用EPPlus生成Excel并通过接口返回给前端:

using OfficeOpenXml;
using System.IO;
using Microsoft.AspNetCore.Mvc;[ApiController]
[Route("api/[controller]")]
public class ExcelController : ControllerBase
{[HttpGet]public IActionResult GenerateExcel(){// 创建一个新的ExcelPackage对象using (ExcelPackage package = new ExcelPackage()){// 添加工作表ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet1");// 设置数据到工作表中worksheet.Cells["A1"].Value = "Name";worksheet.Cells["B1"].Value = "Age";worksheet.Cells["A2"].Value = "John";worksheet.Cells["B2"].Value = 25;worksheet.Cells["A3"].Value = "Jane";worksheet.Cells["B3"].Value = 30;// 保存Excel文件流MemoryStream memoryStream = new MemoryStream();package.SaveAs(memoryStream);// 设置文件名string fileName = "sample.xlsx";// 返回Excel文件return File(memoryStream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName);}}
}

在这个示例中,我们创建了一个ExcelController控制器,并在其中定义了一个GenerateExcel动作。这个动作使用EPPlus生成Excel文件,将文件保存到MemoryStream中,并使用File方法将MemoryStream作为响应返回给前端。

需要注意的是,你需要确保在控制器中引入了Microsoft.AspNetCore.Mvc命名空间。

通过调用api/Excel接口,你可以获取到生成的Excel文件,并在前端进行下载。

合并单元格

生成Excel文件之前执行了单元格合并操作:

using OfficeOpenXml;
using System.IO;
using Microsoft.AspNetCore.Mvc;[ApiController]
[Route("api/[controller]")]
public class ExcelController : ControllerBase
{[HttpGet]public IActionResult GenerateExcel(){// 创建一个新的ExcelPackage对象using (ExcelPackage package = new ExcelPackage()){// 添加工作表ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet1");// 设置数据到工作表中worksheet.Cells["A1"].Value = "Name";worksheet.Cells["B1"].Value = "Age";worksheet.Cells["A2"].Value = "John";worksheet.Cells["B2"].Value = 25;worksheet.Cells["A3"].Value = "Jane";worksheet.Cells["B3"].Value = 30;// 合并单元格worksheet.Cells["A1:B1"].Merge = true;// 保存Excel文件流MemoryStream memoryStream = new MemoryStream();package.SaveAs(memoryStream);// 设置文件名string fileName = "sample.xlsx";// 返回Excel文件return File(memoryStream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName);}}
}

在上述示例中,我们在设置数据之后,通过将Merge属性设置为true,以实现单元格"A1"和"B1"的合并。这将把"A1"和"B1"单元格合并为一个单元格。

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

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

相关文章

算法随笔:图论问题之割点割边

割点 定义 割点的定义&#xff1a;如果一个点被删除之后会导致整个图不再是一个连通图&#xff0c;那么这个顶点就是这个图的割点。举例&#xff1a; 上图中的点2就是一个割点&#xff0c;如果它被删除&#xff0c;则整个图被分为两个连通分量&#xff0c;不再是一个连通图。…

【交换排序】冒泡排序 与 快速排序

交换排序基本思想&#xff1a; 所谓交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0c;交换排序的特点是&#xff1a;将键值较大的记录向序列的尾部移动&#xff0c;键值较小的记录向序列的前部移动。 目录 1.冒泡排序 2.快…

OptaPlanner笔记5

2.4 与spring boot集成 2.4.4 添加依赖 <dependency><groupId>org.optaplanner</groupId><artifactId>optaplanner-spring-boot-starter</artifactId> </dependency>2.4.8 创建求解器服务 import org.optaplanner.core.api.solver.Solv…

Django笔记之数据库函数之日期函数

日期函数主要介绍两个大类&#xff0c;Extract() 和 Trunc() Extract() 函数作用是提取日期&#xff0c;比如我们可以提取一个日期字段的年份&#xff0c;月份&#xff0c;日等数据 Trunc() 的作用则是截取&#xff0c;比如 2022-06-18 12:12:12&#xff0c;我们可以根据需求…

CSS:弹性盒子模型详解(用法 + 例子 + 效果)

目录 弹性盒子模型flex-direction 排列方式 主轴方向换行排序控制子元素缩放比例缩放是如何实现的&#xff1f; 控制子元素的对其方式justify-content 横向 对齐方式align-items 纵向 对齐方式 align-content 多行 对齐方式 弹性盒子模型 flex-direction 排列方式 主轴方向 f…

CI+JUnit5并发单测机制创新实践

目录 一. 现状问题 二. 分析原因 三. 采取措施 四. 实践步骤 五. 效能提升 资料获取方法 一. 现状问题 针对现如今高并发场景的业务系统&#xff0c;“并发问题” 终归是必不可少的一类&#xff08;占比接近10%&#xff09;&#xff0c;每次出现问题和事故后&#xff0c…

CNN经典网络模型之GoogleNet论文解读

目录 1. GoogleNet 1.1 Inception模块 1.1.1 1x1卷积 1.2 辅助分类器结构 1.3 GoogleNet网络结构图 1. GoogleNet GoogleNet&#xff0c;也被称为Inception-v1&#xff0c;是由Google团队在2014年提出的一种深度卷积神经网络架构&#xff0c;专门用于图像分类和特征提取任…

vConsole手机调试模式uniapp和原生h5

手机打开调试模式的方法 尽量放在页面头部&#xff0c;底部有可能不行 原生 <script src"https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></script> <script>// init vConsolevar vConsole new VConsole();console.log(Hello world)…

ElasticSearch安装与启动

ElasticSearch安装与启动 【服务端安装】 1.1、下载ES压缩包 目前ElasticSearch最新的版本是7.6.2&#xff08;截止2020.4.1&#xff09;&#xff0c;我们选择6.8.1版本&#xff0c;建议使用JDK1.8及以上。 ElasticSearch分为Linux和Window版本&#xff0c;基于我们主要学习…

Linux服务器映射到本地磁盘

内容来自网友博客。 把linux服务器上的文件夹映射到本地作为一个磁盘来访问&#xff0c;步骤如下 一. samba的安装: sudo apt-get install samba // (sudo get temp root auth) sudo apt-get install smbfs //旧版本 sudo apt-get install cifs-utils //新版本 上…

【reactNative混合安卓开发~使用问题持续更】

reactNative混合安卓开发 reactNative开发移动端reactNative界面开发前端init.bat文件部分组件第三方组件解析1、定义theme主题shopify/restyle&#xff1b;菜单导航react-navigation/drawer、react-navigation/native&#xff1b; RN问题记录1、使用theme.js写的公共组件报错&…

【博客699】docker daemon预置iptables剖析

docker daemon预置iptables剖析 没有安装docker的机器&#xff1a;iptables为空&#xff0c;且每个链路的默认policy均为ACCEPT [root~]# iptables-save[root ~]# iptables -t raw -nvL Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt …

k8s node 误删除了如何自动创建 csr重新加入集群

worker node 节点当部署晚 kubelet、kube-proxy就会加入集群&#xff0c;如何加入呢&#xff0c; [rootkube-node01 ssl]# mv kubelet-client-2023-08-13-01-19-00.pem kubelet-client-current.pem kubelet.crt kubelet.key /tmp/kubelet [rootkube-node01 ssl]# systemctl da…

Java 正则表达式【基本语法】

基本介绍 首先我们需要了解的是正则表达式中的各种元字符的功能&#xff0c;主要分为以下几种&#xff1a; 限定符选择匹配符分组组合和反向引用符特殊字符字符匹配符定位符 需要注意的是&#xff1a;在 Java正则表达式中&#xff0c;两个斜杠 \\ 相当于其它语言中的一个斜杠…

认识vite

一.了解vite的不同版本的更新 vite1版本是基于vue项目的&#xff0c;无法跨框架使用vite2可以跨框架&#xff08;vue2&#xff0c;vue3&#xff0c;react&#xff09;vite3模板变更&#xff1b;vite cli优化&#xff1b;import.meta.glob API变化&#xff1b;其他vite4主版本主…

Django框架-使用celery(一):django使用celery的通用配置,不受版本影响

目录 一、依赖包情况 二、项目目录结构 2.1、怎么将django的应用创建到apps包 三、celery的配置 2.1、celery_task/celery.py 2.2、celery_task/async_task.py 2.3、celery_task/scheduler_task.py 2.4、utils/check_task.py 四、apps/user中配置相关处理视图 4.1、基本…

【数据结构】复杂度

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;数据结构 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、什么是数据结构 二、什么是算法 三、算法的效率 四、时间复杂度 4.…

k8s基础

k8s基础 文章目录 k8s基础一、k8s组件二、k8s组件作用1.master节点2.worker node节点 三、K8S创建Pod的工作流程&#xff1f;四、K8S资源对象1.Pod2.Pod控制器3.service && ingress 五、K8S资源配置信息六、K8s部署1.K8S二进制部署2.K8S kubeadm搭建 七、K8s网络八、K8…

人大金仓三大兼容:Oracle迁移无忧

企业级应用早期的架构模式是C/S&#xff08;Client/Server&#xff09;模式&#xff0c;Client做人机交互逻辑的呈现&#xff0c;Sever做业务计算逻辑的实现。这就类似餐馆的运作模式&#xff0c;Client是前台的服务员提供点菜和上菜服务&#xff0c;而Server则是后厨完成菜品的…

设计模式之工厂方法模式(FactoryMethod)

一、概述 定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。 二、适用性 1.当一个类不知道它所必须创建的对象的类的时候。 2.当一个类希望由它的子类来指定它所创建的对象的时候。 3.当类将创建对象的职责委…