[英]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.