当前位置: 首页 > article >正文

.net core在linux导出excel,System.Drawing.Common is not supported on this platform

使用框架 .NET7
导出组件 Aspose.Cells for .NET 5.3.1

asp.net core mvc 如果使用Aspose.Cells导出excel时,报错
System.Drawing.Common is not supported on this platform

平台特定实现:
对于Windows平台,System.Drawing.Common 通常是可以正常工作的。
对于非Windows平台,你可能需要寻找替代方案,如使用 SkiaSharp、ImageSharp 或其他跨平台的图形库。
System.Drawing.Common 是一个提供基本图形功能的库,但它并不是在所有平台上都可用。特别是在非Windows平台上(如Linux和macOS),由于底层图形系统的差异,直接使用 System.Drawing.Common 可能会遇到问题

推荐使用不依赖操作系统底层环境的组件来导出excel,这样linux中就不用安装图像组件依赖了,比如libSkiaSharp,这里推荐用 MiniExcel 来导出excel,支持Linux,直接在nuget搜索安装MiniExcel

MiniExcel 组件介绍

MiniExcel 简单高效,避免了 OOM 的 .NET 处理 Excel 工具。
目前大多数流行的框架都需要将所有数据加载到内存中以方便操作,但这会引起内存消耗问题。MiniExcel 尝试使用流中的算法将原来的 1000 MB 占用减少到几 MB,以避免 OOM(内存不足)。

特征

  • 低内存消耗,避免 OOM(内存不足)和全量 GC
  • 支持每行数据的实时操作
  • 支持 LINQ 延迟执行,可以做低消耗、快速分页等复杂查询
  • 轻量级,未安装 Microsoft Office,无 COM+,DLL 大小小于 150KB
  • 简单的 API 样式来读/写/填充 excel
    在这里插入图片描述

MiniExcel 导出excel参考代码:

 public static string ExportExcelFile(Object list, string fileName)
 {
     //检查导出目录是否在 
     string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "export");
     if (!System.IO.Directory.Exists(dir))
     {
         System.IO.Directory.CreateDirectory(dir);
     }

     string filePath = Path.Combine(dir, fileName);
 
     string url = Path.Combine("export", fileName);

//测试数据
     var value = new[] {
         new { id="12",name="武松",createTime="2024-12-17 16:35:41",point=284.7},
         new { id="23",name="李斯",createTime="2024-12-11 16:35:41",point=184.5},
         new { id="31",name="欧阳楠",createTime="2024-10-14 16:35:41",point=384.1},
         new { id="14",name="范仲淹",createTime="2024-05-24 16:35:41",point=291.2}
     };

     var config = new OpenXmlConfiguration
     {
            /*
      * new DynamicExcelColumn("id"){Name="主键" } , Name设置列中文名称;
       new DynamicExcelColumn("id"){Name="主键" ,Ignore=true} , Ignore表示此列不导出;
       Index设置所在列下标(数字),也可以控制显示顺序; 
      */
         //配置列名
         DynamicColumns = new DynamicExcelColumn[] {
             new DynamicExcelColumn("id"){Name="主键" },
             new DynamicExcelColumn("name"){ Name="姓名",Width=20},
             new DynamicExcelColumn("createTime"){Name="创建时间", Format="yyyy-MM-dd",Width=55},
             new DynamicExcelColumn("point"){ Name="得分"},
         }
     };

     MiniExcel.SaveAs(filePath, value, configuration: config);



     //删除已经过期的文件
     Action<string> delFileAc = (fileDir) =>
     {
         try
         {
             var files = System.IO.Directory.GetFiles(fileDir);
             if (files == null || files.Length == 0) return;
             foreach (var filePath in files)
             {
                 if (File.Exists(filePath))
                 {
                     var fileInfo = new FileInfo(filePath);
                     if ((DateTime.Now - fileInfo.LastWriteTime).TotalHours > 48)
                     {
                         File.Delete(filePath);
                         Console.WriteLine("成功删除导出文件=" + filePath);
                     }
                 }
             }
         }
         catch (Exception)
         {
         }
     };
     delFileAc(dir);

     return url;
 }

导出文件效果

在这里插入图片描述


http://www.kler.cn/a/446184.html

相关文章:

  • 【C#】try-catch-finally语句的执行顺序,以及在发生异常时的执行顺序
  • 面试题整理4----lvs,nginx,haproxy区别和使用场景
  • YOLOv8目标检测(七)_AB压力测试
  • 清远榉之乡托养机构为你深度分析:特殊碳水化合物饮食对自闭症的作用
  • uniapp自定义树型结构数据弹窗,给默认选中的节点,禁用所有子节点
  • C语言经典100例
  • HTML、CSS页面资料库
  • 如何写一个转盘
  • 用C#绘制曼德布洛集分形
  • vue项目 中 asstes文件夹 与 static文件夹 的联系与区别
  • React 底部加载组件(基于antd)
  • String.prototype.padStart() 方法来实现日不足两位时补充零
  • 算法基础——递归
  • 最新 neo4j 5.26版本下载安装配置步骤【附安装包】
  • 梳理你的思路(从OOP到架构设计)_介绍GoF设计模式
  • 伪逆不能把矩阵变成单位阵
  • 【AI系列】Paddle Speech安装指南
  • Django REST framework(DRF)在处理不同请求方法时的完整流程
  • C#中的ConcurrentDictionary:线程安全实现与高效并发访问
  • 机器学习之拟合
  • 基于单片机的Wi-Fi控制智能窗帘设计
  • 深入理解 HTTP HEAD 请求:节省带宽、提高效率的秘密武器
  • flux模型的下载、配套及简易使用记录(ubuntu)
  • Laya ios接入goole广告,搭建环境 1
  • 一款轻量级的开源笔记服务软件
  • 常见八股文03