当前位置:   article > 正文

C#使用开源操作库MiniExcel操作Excel_miniexcel 插入行

miniexcel 插入行

简介

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 文件
  1. using MiniExcelLibs;
  2. // 读取 Excel 文件到 DataSet
  3. var ds = ExcelUtil.OpenExcelFile("demo.xlsx");
  4. // 读取指定工作表
  5. var sheet = ds.Tables["Sheet1"];
  6. // 遍历行
  7. foreach (DataRow row in sheet.Rows)
  8. {
  9. // 处理每一行
  10. Console.WriteLine(row[0]);
  11. }

写入 Excel 文件
  1. using MiniExcelLibs;
  2. // 创建 DataTable
  3. var table = new DataTable();
  4. table.Columns.Add("姓名");
  5. table.Columns.Add("年龄");
  6. table.Columns.Add("班级");
  7. // 添加数据
  8. table.Rows.Add("李雷", "18","三年一班");
  9. table.Rows.Add("韩梅梅", "18","三年一班");
  10. table.Rows.Add("李白", "18","三年二班");
  11. table.Rows.Add("杜甫", "18","三年二班");
  12. table.Rows.Add("白居易", "18","三年二班");
  13. // 写入 Excel 文件
  14. ExcelUtil.SaveExcel(table, "demo.xlsx");

读取 Excel
 
  1. using MiniExcelLibs;
  2. //指定读取的 Sheet
  3. MiniExcel.Query(path, <span class="code-snippet__attr">sheetName</span>: <span class="code-snippet__string">"SheetName"</span>);
  4. //读取所有列
  5. var columns = MiniExcel.GetColumns("D:\\Demo\\Student.xlsx",useHeaderRow:true);
  6. // 读取单个单元格
  7. var value = ExcelUtil.GetValue("demo.xlsx", "A1");
  8. // 读取指定工作表的单元格
  9. var valueFromSheet = ExcelUtil.GetValue("demo.xlsx", "Sheet2", "A1");

写入 Excel 特定单元格
  1. using MiniExcelLibs;
  2. // 将值写入到 Excel 文件的特定单元格
  3. ExcelUtil.SetValue("demo.xlsx", "A1", "韩梅梅");

通过实体类来导入导出

定义实体类

  1. //学生实体类
  2. public class Student
  3. {
  4. //指定Excel的列表
  5. [ExcelColumnName("姓名")]
  6. public string Name { get; set; }
  7. [ExcelColumnName("年龄")]
  8. public int Age { get; set; }
  9. //指定Excel的列宽
  10. [ExcelColumnWidth(20)]
  11. [ExcelColumnName("所在班级")]
  12. public string ClassName{ get; set; }
  13. }

导出

 
  1. //导出Excel
  2. private void WriteExcel()
  3. {
  4. // 创建一个包含数据的列表
  5. var data = new List<Student>
  6. {
  7. new Student{Name= "李雷",Age= 20,ClassName= "三年二班" },
  8. new Student{ Name= "韩梅梅",Age= 18,ClassName= "三年二班" },
  9. new Student{ Name= "李白", Age= 19, ClassName= "三年二班" }
  10. };
  11. // 指定要保存的文件名
  12. var saveFileDialog = new SaveFileDialog();
  13. saveFileDialog.Filter = "Excel Files|*.xlsx";
  14. if (saveFileDialog.ShowDialog() == DialogResult.OK)
  15. {
  16. string filePath = saveFileDialog.FileName;
  17. // 写入数据到 Excel 文件
  18. MiniExcel.SaveAs(filePath, data);
  19. MessageBox.Show("数据已成功导出到 Excel 文件!");
  20. }
  21. }

​​​​​​​

在现有 Excel 的基础上插入行

  1. //导出Excel
  2. private void WriteExcel()
  3. {
  4. // 指定要保存的文件名
  5. var saveFileDialog = new SaveFileDialog();
  6. saveFileDialog.Filter = "Excel Files|*.csv";
  7. if (saveFileDialog.ShowDialog() == DialogResult.OK)
  8. {
  9. string filePath = saveFileDialog.FileName;
  10. // 写入数据到 Excel 文件
  11. MiniExcel.SaveAs(filePath, data);
  12. //插入行
  13. var d = new Student
  14. { Name = "白居易", Age = 20, ClassName= "三年二班" };
  15. MiniExcel.Insert(filePath, d);
  16. MessageBox.Show("已成功在Excel 文件种插入1行数据 !");
  17. }
  18. }

读取 Excel 并映射到实体类

  1. private void ReadExcel()
  2. {
  3. // IEnumerable
  4. var rows = MiniExcel.Query<Student>("D:\\Demo\\Student.xlsx");
  5. foreach (var row in rows)
  6. {
  7. //row 就是一个Student实体
  8. Console.WriteLine(row.Name);
  9. }
  10. }

使用模板导出数据

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

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

  1. //单条数据导出
  2. private void WriteExcelByTemplate()
  3. {
  4. string template = "D:\\Demo\\StudentTemplate.xlsx";
  5. var value = new Student
  6. {
  7. Name = "杜牧",
  8. Age = 19,
  9. ClassName= "三年二班"
  10. };
  11. MiniExcel.SaveAsByTemplate("D:\\Demo\\StudentData.xlsx", template, value);
  12. }

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

  1. // 数据集合导出
  2. private void WriteExcelByListTemplate()
  3. {
  4. string template = "D:\\Demo\\StudentListTemplate.xlsx";
  5. // 创建一个包含数据的列表
  6. var data = new
  7. {
  8. P = new[]
  9. {
  10. new Student{Name= "曹操",Age= 20,ClassName= "三年二班" },
  11. new Student{ Name= "刘备",Age= 18,ClassName= "三年二班" },
  12. new Student{ Name= "孙权", Age= 19, ClassName= "三年二班" }
  13. }
  14. };
  15. MiniExcel.SaveAsByTemplate("D:\\Demo\\StudentData.xlsx", template, data);
  16. }


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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/635708
推荐阅读
相关标签
  

闽ICP备14008679号