簡體   English   中英

關閉過濾器

[英]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.MissingMissing.Value作為參數。

第一個調用將在AutoFilter打開時關閉,第二個調用將在關閉時將其打開,反之亦然。 但在任何一種情況下,由於過濾,將不再有隱藏的單元格。

我使用以下代碼,因為即使xlSheet.AutoFilterModetrue 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM