首页 > 编程语言 >C#使用开源操作库MiniExcel操作Excel

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

时间:2024-05-20 20:42:14浏览次数:12  
标签:xlsx MiniExcel C# Excel Student var new

简介

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(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 https://www.iwmyx.cn/miniexceldemo.html
 

标签:xlsx,MiniExcel,C#,Excel,Student,var,new
From: https://www.cnblogs.com/star8521/p/18202752

相关文章

  • Reflective Journal
    1)Atthebeginningofmyvideoproducing,IwillthinkthatwhichissuitableformystoryandwhatshouldIchoosetodiscuss.Then,it'stimetosortthroughmythoughtsandcomeupwithageneraloutlineofthestory.Forthenextpart,Iamsupposedt......
  • crypto--rsa基础(1)
    在ctf---crypto中rsa应该是最常见也是现在最容易考到的密码题型吧,这篇博客就简单的介绍一下rsa和rsa的一些基本的攻击手法.对于我们这些萌新来说要做rsa的话也必须先掌握四大基本公式就是欧拉函数,费马小定理,中国剩余定理,威尔逊定理,现在就先基本了解一下就能够做题了,在网上的百度......
  • Reflective Journal II
    1.Firstly,Igotaideaaboutthechoiceofstory.Next,ascriptwaswrittentooutlineit.Then,Idownloadedsomerelatedpictures,addedsubtitlesandvoiceovers.Furthermore,Iaddedbackgroundmusic,soundeffects,andvisualeffectstoenhancethenarrativ......
  • Reflective Journal 2
    (1)TheprocessofmakingadigitalstoryFirst,IfindthestoryinChineseandthentranslateitintoEnglish.Inthemeantime,Ishortenthecontent.Next,Isearchforpicturesmatchingwithmystoryscrip.Then,Iseektofindsuitablebackgroundmusi......
  • TypeScript入门介绍
    目录TypeScript入门介绍什么是TypeScript?发展历史优缺点应用场景开发工具环境依赖编程IDEvs调试构建工具/工程化步骤汇总第一个项目TypeScript入门介绍什么是TypeScript?1.1TypeScript是由微软开发的一种开源的编程语言。它是JavaScript的一个超集,通过为JavaScript提供......
  • C# enum parse enumtype and name to retrieve enum
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceConsoleApp35{internalclassProgram{staticvoidMain(string[]args){ParseEnumDemo();......
  • 蟒蛇书(Python编程:从入门到实践)第17章使用API 17.1.4处理API响应报错Caused by ProxyEr
    书上提供的原始代码:importrequests#执行API调用并存储响应url='https://api.github.com/search/repositories?q=language:python&sort=stars'headers={'Accept':'application/vnd.github.v3+json'}r=requests.get(url,headers=headers)prin......
  • CF1618FG
    闲的想做道*2000,于是找到了CF1618F。wc,我怎么会了。o,只有绿啊,没事了。再看看G吧。wc,我怎么又会了???wc,这有蓝???1618F首先,我们发现对于一个合法二进制数添加\(0\),相当于去除末尾所有的\(0\)后再翻转,即翻转后会变成\(1\ldots1\)的形式。引理:二进制数如果在非第一次操......
  • 【原创】SPI LCD GC9A01+CST816S
    环境:Win1064bit+VSC&esp-idf插件准备:安装好cst816s库步骤:修改Kconfig.projbuild,加入cst816s支持使用SquareLine_Studio生成ui文件夹并移动到main下main/CMakeLists.txt中加入main/ui/CMakeLists.txt文件内的*.c文件清除工程并重新构建执行menuconfig并修改ExampleCo......
  • Compose
    最近研究Strapi源码,偶尔看到request-compose这个包,看到一个很简单很有用的compose方法的实现。compose(...fns)(args),这个是compose方法的使用形式,它的目的是将某个参数按顺序依次传递给每个方法,前一个方法的返回是第二个方法的参数。它的难点是,这些方法可能是同步异步混合在一......