首页 > 编程语言 >C#使用MiniExcel导入导出数据到Excel/CSV文件【IO操作】

C#使用MiniExcel导入导出数据到Excel/CSV文件【IO操作】

时间:2024-04-24 12:24:22浏览次数:27  
标签:MiniExcel C# Age Excel localFilePath qa saveFileDialog new

MiniExcel简介

简单、高效避免OOM的.NET处理Excel查、写、填充数据工具。
目前主流框架大多需要将数据全载入到内存方便操作,但这会导致内存消耗问题,MiniExcel 尝试以 Stream 角度写底层算法逻辑,能让原本1000多MB占用降低到几MB,避免内存不够情况。

 特点:

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

项目地址:mini-software/MiniExcel: Fast, Low-Memory, Easy Excel .NET helper to import/export/template spreadsheet (support Linux, Mac) (github.com)

 

安装 MiniExcel

Nuget

 导出数据

 public class Student
  {
      public string? Name { get; set; }
      public string? Home { get; set; }
      public int? Age {  get; set; }   
  }

 //获得当前目录的路径
 string currentDirectory = Directory.GetCurrentDirectory();

 //合并当前目录与Excel文件名
 var path = Path.Combine(currentDirectory, $"{Guid.NewGuid()}.xlsx");
 
  List<Student> studentList = new List<Student>()
  {
      new Student { Name = "小东", Home = "New York", Age = 25 },
      new Student { Name = "小西", Home = "London", Age = 22 },
      new Student { Name = "小南", Home = "Paris", Age = 28 },
      new Student { Name = "小北", Home = "Tokyo", Age = 24 },
      new Student { Name = "小王", Home = "Berlin", Age = 26 }
 };

MiniExcel.SaveAs(path, studentList);
        /// <summary>
        /// 操作3
        /// 导出数据
        /// 导出指定库全部数据,或导出指定库用户选中的数据
        /// </summary>
        /// <returns></returns>
        [RelayCommand(CanExecute = nameof(CanExport))]
        private async Task ExportAsync()
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            //打开的文件选择对话框上的标题
            saveFileDialog.Title = "请选择文件夹";
            //设置文件类型
            saveFileDialog.Filter = "文本文件(*.xlsx)|*.xlsx";
            saveFileDialog.FileName = @$"{CurrentQALibrary.QALibraryName}{DateTime.Now:M}.xlsx";
            //设置默认文件类型显示顺序
            saveFileDialog.FilterIndex = 1;
            //保存对话框是否记忆上次打开的目录
            saveFileDialog.RestoreDirectory = true;

            //按下确定选择的按钮
            if (saveFileDialog.ShowDialog() == true)
            {
                //获得文件路径
                string localFilePath = saveFileDialog.FileName.ToString();
                if (QAModels.Where(e => e.IsChecked).Count() == 0)

                {
                    if (File.Exists(localFilePath)) File.Delete(localFilePath);
                    var qaModels = from qa in QAModels where qa.IsChecked == true && qa.QALibraryID == CurrentQALibrary.QALibraryID select new { 题型 = qa.Questiontype, 试卷内容 = qa.Content, 题目 = qa.SubjectTitle };

                    await MiniExcel.SaveAsAsync(localFilePath, qaModels);
                }
                else
                {
                    if (File.Exists(localFilePath)) File.Delete(localFilePath);
                    var qaModels = from qa in QAModels where qa.IsChecked == true && qa.QALibraryID == CurrentQALibrary.QALibraryID select new { 题型 = qa.Questiontype, 试卷内容=qa.Content,题目=qa.SubjectTitle };
                    await MiniExcel.SaveAsAsync(localFilePath, qaModels);
                }

            }

        }

 

 

导入数据

 

 var path = "你的文件路径";
 var rows = MiniExcel.Query<Student>(path);

 

标签:MiniExcel,C#,Age,Excel,localFilePath,qa,saveFileDialog,new
From: https://www.cnblogs.com/cdaniu/p/18154915

相关文章

  • 伯克利大学 CS61B Lab配置教程
    基本过程:首先将伯克利大学的代码框架下载到自己的电脑,然后我们直接在框架里修改就行将自己的代码上传到github上,然后使用伯克利大学的Gradescope评测自己写的代码下载代码在自己电脑桌面新建一个文件夹,这里我命名为:cs61b,打开gitbash,使用cd进入我们新创建的文件夹,注意路径......
  • source 1.5 中不支持 lambda 表达式, Deployment failed repository element
    1、java:[400,90]错误:-source1.5中不支持lambda表达式Failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile(default-compile)onproject原因是未指定版本,默认用jdk1.5在编译<plugins><!--指定maven编译的jdk版本,如果不指......
  • 为什么自动驾驶领域发论文都是用强化学习算法,但是实际公司里却没有一家使用强化学习算
    为什么自动驾驶领域发论文都是用强化学习算法,但是实际公司里却没有一家使用强化学习算法?——(特斯拉今年年初宣布推出实际上第一款纯端到端的自动驾驶系统,全部使用强化算法,替换掉原有的30万行C++的rule-based代码)给出一个自己比较认可的答案:https://www.zhihu.com/question/54......
  • Computer Basics 10 - Setting Up a Computer
     Settingupacomputer НастройкакомпьютераSoyouhavea newcomputer andyou'rereadytosetitup.Thismayseemlikeanoverwhelming/ˌəʊvəˈwelmɪŋ/andcomplicated /ˈkɒmplɪkeɪtɪd/task,butit'sactuallyaloteasier......
  • C++ 指针变量的字面量以及其所指对象的字面量
     指针变量的字面量以及其所指对象的字面量 #include<iostream>usingnamespacestd;intmain(){intvar=20;int*var_address;var_address=&var;cout<<"Valueofvarvariavle:"<<var<<endl;//Valueofvarv......
  • CPLEX运行*.cpo文件
    背景:我需要把手上的.cpo模型文件跑起来,但是官网上找了一大圈也没找到相应的方法,最后在一个论坛找到了一些蛛丝马迹。系统信息:Ubuntu22.04, IBM(R)ILOG(R)CPInteractiveOptimizer22.1.0.0解决方法1.启动Cplex的CP模块:在控制台输入`cpoptimizer`2.读取*.cpo文件:在控制......
  • k8s Java 项目替换 jar 中的 class 文件
    背景紧急需求,客户需要立马上线docker包体积过大,远程不稳定,文件发不过去单点修改,风险低步骤1.获取pod所在宿主机podonhostkubectl-n$namespancegetpods-owide|grep$podname|grepRunning2.获取pod的容器cidkubectl-n$namespancedescribepo$podn......
  • The 2022 ICPC Asia Xian Regional Contest / ICPC 西安 2022 (ABDHJKL)
    本文搬运自本人的知乎文章。https://zhuanlan.zhihu.com/p/588162564好久没有在补题之后写题解的习惯了。但是最近感觉有些题目的思路即使在题目通过后仍然难以理清,因此觉得需要写些东西帮助自己整理思路,另外也方便以后翻看积累到的技巧。J.StrangeSum题目链接Problem-J......
  • Mysql:canal-deployer:如何阻断canal-client对deployer上的filter过滤条件订阅修改:https
     也算是安全管理上的一个控制点:本来,允许客户端去根据自己的实际需求去服务端订阅自己关心的数据流,是很好的。but,但是,服务端的黑白名单过滤,尤其是白名单的filter条件会被客户端的最新订阅的过滤条件给覆盖!!!这算是bug吗?上游服务端怎么显得那么没地位呢!!!??? #===================......
  • 2022 China Collegiate Programming Contest (CCPC) Mianyang | 2022 CCPC 绵阳(MAED
    搬运自本人知乎文章。https://zhuanlan.zhihu.com/p/588646549M.Rock-Paper-ScissorsPyramid题目链接Problem-M-Codeforces题意有一个长度为\(n\)的石头剪刀布序列,每个元素是RPS(石头、布、剪刀)中的一个,我们需要用这个序列构造一个三角,三角的底层为这个序列,第\(i(......