C# 自定义导出 .NET Core
安装包:Npoi.Mapper Version=4.1.0.0
/// <summary> /// 导出商品信息 /// </summary> /// <param name="data"></param> /// <returns></returns> public ActionResult ExportCommodity(string data) { string filename = DateTime.Now.ToString("yyyyMMddHHmmss") + "商品信息.xlsx"; List<ExportCommoditySM> exportData = new List<ExportCommoditySM>(); try { var model = Newtonsoft.Json.JsonConvert.DeserializeObject<CommodityQuerySM>(data); exportData = commodityDAL.ExportCommodity(model, UserInfo.UserID); var mapper = new Mapper(); MemoryStream stream = new MemoryStream(); //将students集合生成的Excel直接放置到Stream中 //第一个参数是数据集合,第二个参数是Sheet名称,第三个参数表示是追加数据还是覆盖数据 if (model.ExportConfig != null && model.ExportConfig.Any()) { exportDAL.ConfigMapper<ExportCommoditySM>(model.ExportConfig, ref mapper); } mapper.Put<ExportCommoditySM>(exportData, "商品信息", true); mapper.Save(stream, filename); return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename); } catch (Exception e) { return File("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "商品信息.xlsx"); } }
自定义导出方法:
configDetails导出配置数据
public void ConfigMapper<T>(List<tt_scm_exportconfigdetailM> configDetails, ref Mapper mapper) { try { if (configDetails == null || !configDetails.Any()) return; configDetails = configDetails.OrderBy(t => t.PropertyIndex).ToList(); var ignoreList = configDetails.Where(t => t.IsIgnore == 1).Select(t => t.PropertyCode).Distinct().ToArray(); var mapList = configDetails.Where(t => t.IsIgnore == 0).ToList(); if (ignoreList != null && ignoreList.Any()) { mapper.Ignore<T>(ignoreList); } foreach (var column in mapList) { mapper.Map<T>(column.PropertyIndex, column.PropertyCode, column.PropertyName); } } catch (Exception ex) { } }
实体:
public class tt_scm_exportconfigdetailM { /// <summary> /// 配置明细ID /// </summary> [Key] [Column("ConfigDetailID")] public long ConfigDetailID { get; set; } /// <summary> /// 配置ID /// </summary> [Column("ConfigID")] public long ConfigID { get; set; } /// <summary> /// 项目ID /// </summary> [Column("ResourceID")] public int ResourceID { get; set; } /// <summary> /// 属性顺序 /// </summary> [Column("PropertyIndex")] public ushort PropertyIndex { get; set; } /// <summary> /// 属性编码 /// </summary> [Column("PropertyCode")] public string PropertyCode { get; set; } /// <summary> /// 属性名称 /// </summary> [Column("PropertyName")] public string PropertyName { get; set; } /// <summary> /// 忽略 /// </summary> [Column("IsIgnore")] public int IsIgnore { get; set; } /// <summary> /// 创建人 /// </summary> [Column("CreateBy")] public int CreateBy { get; set; } /// <summary> /// 创建时间 /// </summary> [Column("CreateDate")] public DateTime CreateDate { get; set; } = DateTime.Now; /// <summary> /// 更新人 /// </summary> [Column("UpdateBy")] public int UpdateBy { get; set; } /// <summary> /// 更新时间 /// </summary> [Column("UpdateDate")] public DateTime UpdateDate { get; set; } }
无限接近死亡,才能领悟生命的真谛
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧