[英]How to remove AutoFilter Using C# in EPPlus
我尝试了以下C# 编码:
wsDt.Cells["A10:G10"].AutoFilter = false;
但过滤器并没有从我的 excel 中删除。
任何其他方式来删除它。
谢谢...
在Excel中,当您使用Format as Table选项时,它不仅会设置数据样式,还会创建命名范围 - Table1。 此选项还会自动启用过滤器按钮。 格式化为表格后,您可以在表格工具 - >表格样式选项中取消选中过滤按钮。
对我有用的是以编程方式做同样的事情。
禁用过滤器按钮
将ShowFilter设置为false在此输入代码
//imagine a table with 5 columns DataTable dt = new DataTable(); dt.TableName = "UniqueTableName"; //define the cells where the headers will appear int topRow = 1; int leftMostColumn = 1; int rightMostColumn = 5; //bind the DataTable using LoadFromDataTable() OfficeOpenXml.ExcelRange excelRange = worksheet.Cells[topRow, leftMostColumn, topRow, rightMostColumn]; excelRange.LoadFromDataTable(dt, true, OfficeOpenXml.Table.TableStyles.Light8); //turn of the filtering OfficeOpenXml.Table.ExcelTable table = worksheet.Tables[dt.TableName]; table.ShowFilter = false;
这似乎是一个EPPlus错误,我不认为它已经解决了最新版本(4.04),至少我可以找到一个解决方案。 我的解决方法是简单地使用循环一次加载电子表格值:
int sheetRow = 3;
for (int outer = 0; outer < outerSourceTable.Rows.Count; outer++)
{
var outerThingId = Convert.ToInt32(outerSourceTable.Rows[outer]["OuterThingId"]);
var outerThingName = Convert.ToString(outerSourceTable.Rows[outer]["OuterThing"]);
var innerThingsTable = _repository.GetInnerThings(outerThingId);
if (innerThingsTable.Rows.Count > 0)
{
myWorksheet.Cells[sheetRow, 1].Value = outerThingName;
// Load the data into the worksheet. We need to load a row at a time
// to avoid the auto-filter bug
for (int inner = 0; inner < innerThingsTable.Rows.Count; inner++)
{
var innerName = Convert.ToString(innerThingsTable.Rows[inner]["Name"]);
var innerDescr = Convert.ToString(innerThingsTable.Rows[inner]["Description"]);
myWorksheet.Cells[sheetRow, 2].Value = innerName;
myWorksheet.Cells[sheetRow, 3].Value = innerDescr;
sheetRow++;
}
sheetRow++;
}
}
如果使用LoadFromCollection()
调用填充Excel数据。 然后,您可以使用默认的Excel表名“表1”来引用它。
这与Patricks的回答相同,但演示了没有DataTable的用法。
excelWorksheet.Cells.LoadFromCollection(myCollection);
ExcelTable table = excelWorksheet.Tables["Table1"];
table.ShowFilter = false;
有时 excel 将表创建为命名范围。 在我的例子中,表格是第一个工作表中唯一的东西,所以以下帮助了我:
var ws = wb.Worksheets.First();
ws.NamedRanges.FirstOrDefault()?.Ranges.FirstOrDefault()?.SetAutoFilter(false);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.