Epplus筛选
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; using OfficeOpenXml; namespace _2022_05_30_Epplus筛选 { class Program { static void Main( string [] args) { ExcelPackage.LicenseContext = LicenseContext.NonCommercial; AutoFilter_Test(); } public static void AutoFilter_Test() { //http://stackoverflow.com/questions/32723483/adding-a-specific-autofilter-on-a-column //Throw in some data var datatable = new DataTable( "tblData" ); datatable.Columns.AddRange( new [] { new DataColumn( "Col1" , typeof ( int )), new DataColumn( "Col2" , typeof ( int )), new DataColumn( "Col3" , typeof ( object )) }); for ( var i = 0; i < 10; i++) { var row = datatable.NewRow(); row[0] = i; row[1] = i * 10; row[2] = Path.GetRandomFileName(); datatable.Rows.Add(row); } //Create a test file var fi = new FileInfo( @"autofilter.xlsx" ); if (fi.Exists) fi.Delete(); using ( var pck = new ExcelPackage(fi)) { var worksheet = pck.Workbook.Worksheets.Add( "Sheet1" ); worksheet.Cells.LoadFromDataTable(datatable, true ); var range = worksheet.Cells[ "A1:C10" ]; range.AutoFilter = true ; pck.Save(); } //Needed prior save in order for the XML to be generated using ( var pck = new ExcelPackage(fi)) { var worksheet = pck.Workbook.Worksheets.First(); //Get reference to the worksheet xml for proper namespace var xdoc = worksheet.WorksheetXml; var nsm = new XmlNamespaceManager(xdoc.NameTable); nsm.AddNamespace( "default" , xdoc.DocumentElement.NamespaceURI); //Create the filters themselves var filter1 = xdoc.CreateNode(XmlNodeType.Element, "filter" , xdoc.DocumentElement.NamespaceURI); var att = xdoc.CreateAttribute( "val" ); att.Value = "40" ; filter1.Attributes.Append(att); //var filter2 = xdoc.CreateNode(XmlNodeType.Element, "filter", xdoc.DocumentElement.NamespaceURI); //att = xdoc.CreateAttribute("val"); //att.Value = "50"; //filter2.Attributes.Append(att); //Add filters to the collection var filters = xdoc.CreateNode(XmlNodeType.Element, "filters" , xdoc.DocumentElement.NamespaceURI); filters.AppendChild(filter1); // filters.AppendChild(filter2); //Create the parent filter container var filterColumn = xdoc.CreateNode(XmlNodeType.Element, "filterColumn" , xdoc.DocumentElement.NamespaceURI); att = xdoc.CreateAttribute( "colId" ); att.Value = "1" ; filterColumn.Attributes.Append(att); filterColumn.AppendChild(filters); //Now add it to the autoFilters node var autoFilter = xdoc.SelectSingleNode( "/default:worksheet/default:autoFilter" , nsm); autoFilter.AppendChild(filterColumn); //Have to manually hide rows based on criteria worksheet.Cells .Where(cell => cell.Address.StartsWith( "B" ) && cell.Value is double && ( double )cell.Value != 40d && ( double )cell.Value != 50d) .Select(cell => cell.Start.Row) .ToList() .ForEach(r => worksheet.Row(r).Hidden = true ); pck.Save(); } } } } |
效果图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
2016-06-27 C#将图片背景从透明变成白色