[英]Turn Off Filters
所以,我正在Excel文檔中進行一些搜索,但是其他人打開過濾器並讓它們保持打開是很常見的。 當這些過濾器打開時,這些單元格不包含在工作表的單元格區域中。
有沒有辦法關閉這些自定義過濾器,以便我仍然可以到達工作表中的所有單元格?
這是我用來查找方法的方法
Microsoft.Office.Interop.Excel.Range find = sheet.Cells.Find(tapeID, Type.Missing,
Microsoft.Office.Interop.Excel.XlFindLookIn.xlValues, Microsoft.Office.Interop.Excel.XlLookAt.xlPart,
Microsoft.Office.Interop.Excel.XlSearchOrder.xlByRows, Microsoft.Office.Interop.Excel.XlSearchDirection.xlNext, false, Type.Missing, Type.Missing);
當過濾器打開時,我得到一個返回的null對象,除了關閉過濾器之外無法做任何事情,我得到了我需要的東西。
有關關閉過濾器的任何提示嗎?
我會首先測試是否已應用過濾器,然后在以下情況下停用它:
if (xlSheet.AutoFilter != null)
{
xlSheet.AutoFilterMode = false;
}
這應該刪除已應用的任何過濾並刪除過濾器箭頭按鈕。
您可以通過在沒有參數的情況下調用范圍兩次的AutoFilter方法來禁用所有過濾器。
sheet.Cells.AutoFilter();
sheet.Cells.AutoFilter();
我不是非常精通Interop,但你可能需要傳遞5個Type.Missing
或Missing.Value
作為參數。
第一個調用將在AutoFilter打開時關閉,第二個調用將在關閉時將其打開,反之亦然。 但在任何一種情況下,由於過濾,將不再有隱藏的單元格。
我使用以下代碼,因為即使xlSheet.AutoFilterMode
為true
xlSheet.AutoFilterMode = false
也會為我拋出COMException。
if (xlSheet.AutoFilter != null && xlSheet.AutoFilterMode == true)
{
xlSheet.AutoFilter.ShowAllData();
}
如Sid Holland所述 ,這會清除所有過濾器,同時保留過濾器箭頭。
如果要關閉工作表上的所有過濾器,包括表格,這里有一些代碼。 似乎沒有現成的方法來清除所有過濾器,包括表格,更糟糕的是當你嘗試清除過濾器並且表格上有表格時,我們注意到有時會拋出異常。 因此,我們所做的是嘗試兩種方式 - 對於表格和常規工作表,並吞下並記錄我們發現的任何異常。
注意:我不在這里包含日志記錄依賴項,所以我已經評論過了。 為了記錄,我們正在使用log4net。
using Microsoft.Office.Interop.Excel;
class WorksheetDecoratorImpl
{
public Worksheet Worksheet { get; private set; }
public string Name => Worksheet.Name;
public void TryClearAllFilters()
{
try
{
if (Worksheet.AutoFilter != null)
{
Worksheet.AutoFilterMode = false;
}
}
catch(Exception ex)
{
//Log.Error(string.Format("Clear filters encountered an issue. Sheet: {0}", Name));
}
try
{
ListObjects listObjects = Worksheet.ListObjects;
foreach(ListObject listObject in listObjects)
{
listObject.AutoFilter.ShowAllData();
}
}
catch (Exception ex)
{
//Log.Error(string.Format("Clear table filters encountered an issue. Sheet: {0}", Name));
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.