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

news/2024/11/15 13:59:48/文章来源:https://www.cnblogs.com/star8521/p/18202752

简介

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, sheetName: "SheetName");

//读取所有列
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(<span class="code-snippet__number">20</span>)]
[<span class="code-snippet__meta">ExcelColumnName(<span class="code-snippet__meta-string">"所在班级"</span>)</span>]
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()
{// IEnumerablevar 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 https://www.iwmyx.cn/miniexceldemo.html
 

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

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

相关文章

Django性能优化:提升加载速度

title: Django性能优化:提升加载速度 date: 2024/5/20 20:16:28 updated: 2024/5/20 20:16:28 categories:后端开发tags:缓存策略 HTTP请求 DNS查询 CDN分发 前端优化 服务器响应 浏览器缓存第一章:Django性能优化概述 1.1 性能优化的意义 性能优化是Web开发中的关键环节,它…

crypto--rsa基础(1)

在ctf---crypto中rsa应该是最常见也是现在最容易考到的密码题型吧,这篇博客就简单的介绍一下rsa和rsa的一些基本的攻击手法. 对于我们这些萌新来说要做rsa的话也必须先掌握四大基本公式就是欧拉函数,费马小定理,中国剩余定理,威尔逊定理,现在就先基本了解一下就能够做题了…

Python/Go 面试题目整理

目录一、Python 基础知识1.1 可变与不可变数据类型1.8 深浅拷贝1.2 PEP8 编程规范1.3 匿名函数1.4 装饰器1.5 迭代器1.6 生成器1.7 面向对象编程思想1.7.1 Python 中的__new__和__init__的区别1.7.2 反射1.7.3 面向对象1.7.4 鸭子类型1.7.5 你对Python的继承怎么看?1.9 GC 机制…

TypeScript入门介绍

目录TypeScript入门介绍什么是 TypeScript?发展历史优缺点应用场景开发工具环境依赖编程IDEvs调试构建工具/工程化步骤汇总第一个项目 TypeScript入门介绍 什么是 TypeScript?1.1 TypeScript 是由微软开发的一种开源的编程语言。它是 JavaScript 的一个超集,通过为 JavaScri…

Shell编程之免交互

目录1.Here Document免交互2.Here Document常规用法(1)免交互执行命令(2)免交互创建并编辑文件内容(3)tee3.Expect免交互4.编写expect免交互脚本步骤5.read 1.Here Document免交互 使用I/O重定向的方式将命令列表提供给交互式程序 标准输入的一种替代品 命令 <<标记…

jupyter notebook无法找到自己的虚拟环境

1:打开cmd/Anaconda Prompt/Anaconda Powershell Prompt2:进入虚拟环境conda activate 环境名 3:conda list查看有无ipykernel包 如果没有,安装两个包:conda install nb_conda conda install ipykernel 如果下载不了将指令换成conda install nb_conda_kernels 注:conda/…

URLSearchParams:url查询处理工具

let params=new URLSearchParams(a=1&b=2&c=3#hash) 方法和属性: .get( ).has( )  //返回true/false .append(name,value)  //向URL中添加新的参数.set(name,value)  //设置指定参数的值,如果参数不存在则添加新参数 .delete(name)  //删除指定名称的参数 .k…

信息安全事件应急包好DVWA(finish)

​ *DVWA* *信息安全事件应急处理报告**皮包**公司* *20**24**年**5**月**20**日* ** ** 目 录 一、 概述 1.1 应急处理服务背景 1.2 应急处理服务目的 1.3 应急处理服务范围 1.4 应急处理服务依据 1.4.1 应急处理服务委托协议 1.4.2 基础标准与法律文件 1.4.3 参考文件…

P8624 [蓝桥杯 2015 省 AB] 垒骰子

原题链接 题解code #include<bits/stdc++.h> using namespace std; #define ll long long const ll mod=1e9+7; ll a[7][7]={0},e[7]={0};void cf1() {ll tem[7]={0};for(int i=1;i<=6;i++){for(int j=1;j<=6;j++){tem[i]+=a[i][j]*e[j];tem[i]%=mod;}}for(int i=1…

BLE+Compound复合设备

实现功能:BLE主从一体功能(centperi)添加USB复合设备(compound)。 思路:参考BLE_USB例程,该例程已经将BLE和模拟USB设备功能整合,并通过TMOS任务处理。将复合设备的报表替换BLE_USB的报表。 USB上传:

【Azure Storage Account】Azure 存储服务计算Blob的数量和大小的Python代码

问题描述 介绍一段Python脚本,可以在微软云中国区使用。 用于计算Azure Storage Account中Container中Blob类型文件的数量和大小,脚本中允许按照容器,层(热/冷/归档),前缀,软删除/非软删除来计算数量和容量大小, 默认使用的时间为以Blob的最后修改时间作为参考。 执行结果…

Scoket层

Scoket层 【一】Scoket层在哪【二】套接字工作流程一个生活中的场景。你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。 等交流结束,挂断电话结束此次交谈。 生活中的场景就解释了这工作原理。【0】服务端流程先从…