C#使用开源操作库MiniExcel操作Excel

news2024/12/27 12:03:46

简介

MiniExcel 简单、高效避免 OOM 的.NET 处理 Excel 查、写、填充数据工具。

目前主流框架大多需要将数据全载入到内存方便操作,但这会导致内存消耗问题,MiniExcel 尝试以 Stream 角度写底层算法逻辑,能让原本 1000 多 MB 占用降低到几 MB,避免内存不够情况。

特点

低内存耗用,避免 OOM、频繁 Full GC 情况
支持即时操作每行数据
兼具搭配 LINQ 延迟查询特性,能办到低消耗、快速分页等复杂查询
轻量,不需要安装 Microsoft Office、COM+,DLL 小于 150KB
简便操作的 API 风格

安装 MiniExcel

通过 NuGet 安装 MiniExcel 包:

Install-Package MiniExcel

MiniExcel 读写 Excel 文档

读取 Excel 文件
using MiniExcelLibs;


// 读取 Excel 文件到 DataSet

var ds = ExcelUtil.OpenExcelFile("demo.xlsx");




// 读取指定工作表

var sheet = ds.Tables["Sheet1"];


// 遍历行

foreach (DataRow row in sheet.Rows)

{

// 处理每一行

Console.WriteLine(row[0]);

}

写入 Excel 文件
using MiniExcelLibs;


// 创建 DataTable

var table = new DataTable();

table.Columns.Add("姓名");

table.Columns.Add("年龄");

table.Columns.Add("班级");




// 添加数据

table.Rows.Add("李雷", "18","三年一班");

table.Rows.Add("韩梅梅", "18","三年一班");

table.Rows.Add("李白", "18","三年二班");

table.Rows.Add("杜甫", "18","三年二班");

table.Rows.Add("白居易", "18","三年二班");


// 写入 Excel 文件

ExcelUtil.SaveExcel(table, "demo.xlsx");

读取 Excel
 
using MiniExcelLibs;

//指定读取的 Sheet

MiniExcel.Query(path, <span class="code-snippet__attr">sheetName</span>: <span class="code-snippet__string">"SheetName"</span>);

//读取所有列

var columns = MiniExcel.GetColumns("D:\\Demo\\Student.xlsx",useHeaderRow:true);

// 读取单个单元格

var value = ExcelUtil.GetValue("demo.xlsx", "A1");

// 读取指定工作表的单元格

var valueFromSheet = ExcelUtil.GetValue("demo.xlsx", "Sheet2", "A1");

写入 Excel 特定单元格

using MiniExcelLibs;

// 将值写入到 Excel 文件的特定单元格

ExcelUtil.SetValue("demo.xlsx", "A1", "韩梅梅");

通过实体类来导入导出

定义实体类


//学生实体类
public class Student
{
    //指定Excel的列表
    [ExcelColumnName("姓名")]
    public string Name { get; set; }
    [ExcelColumnName("年龄")]
    public int Age { get; set; }
    //指定Excel的列宽
    [ExcelColumnWidth(20)]
    [ExcelColumnName("所在班级")]
    public string ClassName{ get; set; }
}

导出

 
//导出Excel
private void WriteExcel()
{
    // 创建一个包含数据的列表
    var data = new List<Student>
    {
        new Student{Name= "李雷",Age= 20,ClassName= "三年二班" },
        new Student{ Name= "韩梅梅",Age=  18,ClassName=  "三年二班" },
        new Student{ Name= "李白", Age= 19, ClassName= "三年二班" }
    };

    // 指定要保存的文件名
    var saveFileDialog = new SaveFileDialog();
    saveFileDialog.Filter = "Excel Files|*.xlsx";
    if (saveFileDialog.ShowDialog() == DialogResult.OK)
    {
        string filePath = saveFileDialog.FileName;

        // 写入数据到 Excel 文件
        MiniExcel.SaveAs(filePath, data);

        MessageBox.Show("数据已成功导出到 Excel 文件!");
    }
}

​​​​​​​

在现有 Excel 的基础上插入行

//导出Excel
private void WriteExcel()
{
   // 指定要保存的文件名
   var saveFileDialog = new SaveFileDialog();
   saveFileDialog.Filter = "Excel Files|*.csv";
   if (saveFileDialog.ShowDialog() == DialogResult.OK)
   {
       string filePath = saveFileDialog.FileName;

       // 写入数据到 Excel 文件
       MiniExcel.SaveAs(filePath, data);

       //插入行
       var d = new Student
       { Name = "白居易", Age = 20, ClassName= "三年二班" };

       MiniExcel.Insert(filePath, d);

       MessageBox.Show("已成功在Excel 文件种插入1行数据 !");
   }

}

读取 Excel 并映射到实体类


private void ReadExcel()
{
    // IEnumerable
    var rows = MiniExcel.Query<Student>("D:\\Demo\\Student.xlsx");
    foreach (var row in rows)
    {
        //row 就是一个Student实体
        Console.WriteLine(row.Name);
    }
}

使用模板导出数据

类似 Vue 模板 {{变量名称}}

注意:Excel 模板中变量名区分大小写。

//单条数据导出
private void WriteExcelByTemplate()
{
    string template = "D:\\Demo\\StudentTemplate.xlsx";
    var value = new Student
    {
        Name = "杜牧",
        Age = 19,
        ClassName= "三年二班"
    };
    MiniExcel.SaveAsByTemplate("D:\\Demo\\StudentData.xlsx", template, value);

}

集合渲染 {{集合名称.栏位名称}}


// 数据集合导出
private void WriteExcelByListTemplate()
{
    string template = "D:\\Demo\\StudentListTemplate.xlsx";
    // 创建一个包含数据的列表
    var data = new
    {
        P = new[]
        {
            new Student{Name= "曹操",Age= 20,ClassName= "三年二班" },
            new Student{ Name= "刘备",Age=  18,ClassName=  "三年二班" },
            new Student{ Name= "孙权", Age= 19, ClassName= "三年二班" }
        }
    };
    MiniExcel.SaveAsByTemplate("D:\\Demo\\StudentData.xlsx", template, data);
}


来源: C#使用开源操作库MiniExcel操作Excel-武穆逸仙

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

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

相关文章

Git常用命令的使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Introduction of Internet 计算机网络概述

计算机网络的概念 计算机网络的定义&#xff1a; 多台独立的计算机通过通信线路实现资源共享的计算机系统 计算机网络的组成 资源子网&#xff1a;提供共享的软件资源和硬件资源 通信子网&#xff1a;提供信息交换的网络结点和通信线路 计算机网络类型 按照拓扑排序 星型…

Android 配置本地解决下载 Gradle 慢的问题

步骤1 打开项目下 gradle/wrapper/gradle-wrapper.properties 文件。 步骤2 文件内容如下。 #Sat May 25 16:24:00 CST 2024 distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists distributionUrlhttps\://services.gradle.org/distributions/gradle-8.7-bin…

API攻击呈指数级增长,如何保障API安全?

从远程医疗、共享汽车到在线银行&#xff0c;实时API是构建数字业务的基础。然而&#xff0c;目前超过90%的基于Web的网络攻击都以API端点为目标&#xff0c;试图利用更新且较少为人所知的漏洞&#xff0c;而这些漏洞通常是由安全团队未主动监控的API所暴露&#xff0c;致使API…

无人机测绘遥感技术及应用详解

一、技术原理与特点 无人机测绘遥感技术是基于无人机平台搭载各类遥感传感器&#xff0c;通过遥控或自主飞行的方式&#xff0c;快速获取地面目标信息的一种先进技术手段。该技术具有灵活高效、高分辨率、实时性强等特点&#xff0c;广泛应用于国土资源调查、环境监测、城市规…

备战秋招—模拟版图面试题来了

随着暑期的脚步逐渐临近&#xff0c;电子工程和集成电路设计领域的毕业生们&#xff0c;也将迎来了另一个求职的黄金期——秋招。我们总说机会是留给有准备的人。对于有志于投身于模拟版图设计的学子们来说&#xff0c;为了在众多求职者中脱颖而出&#xff0c;充分备战模拟版图…

solidworks画螺母学习笔记

螺母 单位mm 六边形 直径16mm&#xff0c;水平约束&#xff0c;内圆直径10mm 拉伸 选择两侧对称&#xff0c;厚度7mm 拉伸切除 画相切圆 切除深度7mm&#xff0c;反向切除 拔模角度45 镜像切除 倒角 直径1mm 异形孔向导 螺纹线 偏移打勾&#xff0c;距离为2mm…

Word/Excel/PPT使用技巧

Word篇 1、上一页是图片的&#xff0c;如何删除空白页回答&#xff1a;在闪烁处点击下&#xff0c;按住CtrlD,打开字体选项卡&#xff0c;勾选隐藏选项&#xff0c;就成功了&#xff0c;如下图 Excel篇 以上都是本人亲测有效&#xff0c;才放出来的&#xff08;持续更新中&a…

Slash后台管理系统源码阅读笔记 实现环形图统计卡片

目前在梳理工作台相关的代码。 工作台的界面如下&#xff1a; 这里面的Banner的代码已经基本梳理完毕&#xff0c;整体代码如下&#xff1a; import { Col, Row } from antd; import Color from color;import Character3 from /assets/images/characters/character_3.png; i…

【DASBOOK】Mark loves cat

文章目录 一、工具下载二、Mark loves cat解题感悟 一、工具下载 克隆dirsearch仓库&#xff1a; git clone https://github.com/maurosoria/dirsearch.git下载 githack工具 git clone https://github.com/lijiejie/GitHack.git二、Mark loves cat 用dirsearch扫描目录&…

JS(ES_6)_2

1.创建对象的6种方式&#xff1a; 1. obnew Object() ob.nameah ob.age18 2. ob{name:ah,gae:18} 3.工厂模式&#xff1a; 设计一个函数&#xff0c;专门生产Person类型的对象 <script>function createPerson(name,age,family) {var o new Object();o.name name;o.…

WebGL的室内设计软件

WebGL (Web Graphics Library) 是一个JavaScript API&#xff0c;它提供了一种在网页上渲染3D图形的方法&#xff0c;无需使用插件。利用WebGL&#xff0c;开发者可以创建和展示复杂的3D场景&#xff0c;包括室内设计。以下是开发基于WebGL的室内设计软件时可能涉及的一些关键步…

如何禁止U盘拷贝文件|禁止U盘使用的软件有哪些

禁止U盘拷贝文件的方法有很多&#xff0c;比如使用注册表、组策略编辑器等&#xff0c;但这些方法都适合个人&#xff0c;不适合企业&#xff0c;因为企业需要对下属多台电脑进行远程管控&#xff0c;需要方便、省时、省力的方法。目前来说&#xff0c;最好的方法就是使用第三方…

水表电表远程抄表是什么?

1.简述&#xff1a;水表电表远程抄表技术性 随着时代的发展&#xff0c;传统式手动抄表方法早已被更为高效、智能化的远程抄表系统所替代。水表电表远程抄表&#xff0c;说白了&#xff0c;就是利用互联网技术完成对水表和电表读数的远程数据采集管理方法&#xff0c;大大提升…

Css提高——Css的动画与3D转换

Css动画 1、动画元素的使用步骤 制作动画分为两步&#xff1a; 先定义动画再使用&#xff08;调用&#xff09;动画 2、用keyframes定义动画 keyframes 动画名称 {0%{width:100px;} 100%{width:200px;} }其中的0%和100%可以理解为给动画打上了开始和结束的两个关键帧 3、动…

kotlinx.coroutines.debug.AgentPremain

大家好 我是苏麟 . 项目引入AI大模型 debug 出现报错 设置 勾选

ES升级--01--环境准备和安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Linux 单机1.官网下载 Elasticsearchhttps://www.elastic.co/cn/downloads/past-releases/#elasticsearch 2.解压软件3.创建用户设置用户 es 密码 es赋权ES用户数据…

小林coding笔记

MySQL执行流程 MySQL 的架构共分为两层&#xff1a;Server 层和存储引擎层。Server 层负责建立连接、分析和执行 SQL。存储引擎层负责数据的存储和提取。 Mysql执行 启动Mysql net start mysql登陆 mysql -u root -p输入密码

clangd failed: Couldn‘t build compiler instance问题解决!!!

如果其他人的博客不能解决问题&#xff0c;可以试试我的解决方案&#xff1a; 修改compile_commands.json中cc为arm-linux-gnueabihf-gcc&#xff0c; 例如&#xff1a; 之后&#xff0c;clangd就能用了&#xff0c;虽然输出也会报错&#xff0c;但好歹能用了

五管OTA输入极性快速判断

做CMFB还有负反馈的时候曾经在判断输入输出极性上吃了大亏&#xff0c;直接做实验波形正确就是输入正端&#xff0c;全差分就不用考虑这么多了 和弯折&#xff0c;形状类似7&#xff0c;相同方向输入正端&#xff0c;相反的就是输入负端&#xff0c;输出也是和输入负端一个方向…