請注意這個是粗翻譯版,僅供參考,不是精校版 精校版後面纔會更新
英文原版在線文檔 https://github.com/PHPOffice/PHPExcel/wiki/User%20Documentation%20AutoFilters
英文doc pdf 版本下載 http://phpexcel.codeplex.com/releases/view/119187
2016年8月3日10:26:02 如下是翻譯版,基於 1.8.0英文doc版本翻譯 若有問題,請反饋樓主
廢話一句,github的在線文檔沒有doc的完整,可是doc翻譯+上傳圖片會花去不少時間,更新會比較慢,其實主要是圖片也須要上傳,挺麻煩的
PHPExcel AutoFilter Reference developer documentation
PHPExcel developer documentation
PHPExcel Function Reference developer documentation
PHPExcel User Documentation - Reading Spreadsheet Files
PHPExcel自動篩選參考開發文檔.doc
1.目錄
PHPExcel自動篩選參考開發者文檔
1.目錄
2.自動篩選
3.在工做表設置自動篩選區域
4.自動篩選表達式
4.1 簡單的過濾器
4.1.1 匹配空白
4.2 DateGroup過濾器
4.3 自定義過濾器
4.4 動態過濾器
4.5 十大過濾器
5.執行自動篩選
5.1 應用篩選
5.2 顯示過濾後的行
6.自動篩選排序
2.自動篩選
在Excel工做簿中每一個工做表能夠包含一個自動篩選範圍。
只有過濾後的數據顯示,以知足您指定,並隱藏您不想顯示的行標準的行。您能夠經過多個列過濾:過濾器是累加的,這意味着每一個額外的過濾器是基於當前的過濾器上,並進一步下降了數據的子集。
當一個自動篩選應用於單元格區域,在自動篩選範圍的第一行會的標題行,顯示自動篩選下拉圖標。它是否是實際autoFiltered數據的一部分。全部後續行是autoFiltered數據。
所以,一個自動篩選範圍應始終包含標題行和一個或多個數據行(一個數據行是很沒有意義的),但PHPExcel實際上並不會阻止你指定一個無心義的範圍:這取決於你做爲開發人員,以免這樣的錯誤。
要肯定是否使用了濾鏡,請注意在列標題中的圖標。一個下拉箭頭()是指過濾功能,但不適用。在MS Excel中,當你將鼠標懸停在帶過濾功能啓用,但沒有應用列的標題,屏幕提示顯示該列第一行的單元格文本,消息「(顯示全部)」。
一個Filter按鈕()意味着濾波器。當你將鼠標懸停在一個過濾列的標題,屏幕提示顯示應用到該列的過濾器,如「等於一個紅色的單元格顏色」或「超過150大」。
3.在工做表設置自動篩選區域
要在單元格範圍內設置自動篩選。
$ objPHPExcel-> getActiveSheet() - > setAutoFilter(「A1:E20');
在自動篩選範圍的第一行將會是標題行,顯示自動篩選下拉圖標。它是否是實際autoFiltered數據的一部分。全部後續行是autoFiltered數據。所以,一個自動篩選範圍應始終包含標題行和一個或多個數據行(一個數據行是毫無心義的,但PHPExcel實際上並不會阻止你指定一個無心義的範圍:這取決於你做爲開發人員,以免這樣的錯誤。
若是你想整個工做表設置爲自動篩選區域
$ objPHPExcel-> getActiveSheet() - > setAutoFilter(
$ objPHPExcel-> getActiveSheet() - > calculateWorksheetDimension()
);
這使得過濾器,但實際上不該用任何過濾器。
4.自動篩選表達式
PHPEXcel 1.7.8介紹實際建立,讀取和寫入過濾表達式的能力;最初只爲Excel2007中的文件,但後來的版本將其擴展到其餘格式。
要應用過濾器表達式來自動篩選範圍,你首先須要肯定你將要應用此過濾器的列。
$自動篩選= $ objPHPExcel-> getActiveSheet() - > getAutoFilter();
$ columnFilter = $ autoFilter-> getColumn('C');
這將返回自動篩選列對象,而後你可使用過濾器列。
有許多不一樣類型的自動篩選表達的。最經常使用的是:
•簡單的過濾器
•DateGroup過濾器
•自定義過濾器
•動態過濾器
•十大過濾器
這些不一樣類型的任何單柱內相互排斥。不該該在同一列混合了不一樣類型的過濾器。 PHPExcel不會主動阻止你這樣作,但結果是不可預知的。
4.1。簡單的過濾器
在MS Excel中,簡單的過濾器是該列中使用的全部值的下拉列表,用戶能夠選擇他們想要哪些顯示和他們但願經過滴答做響和取消勾選旁邊的每一個選項的複選框隱藏的。
當施加濾波器,將顯示包含選中的條目的行,即不包含將被隱藏的那些值的行。
要建立過濾器表達式,咱們須要經過識別過濾式啓動。在這種狀況下,咱們只是要指定此過濾器是一個標準的過濾器。
$ columnFilter-> setFilterType(
PHPExcel_Worksheet_AutoFilter_Column :: AUTOFILTER_FILTERTYPE_FILTER
);
如今咱們已經肯定了過濾器類型,咱們能夠建立一個過濾規則,並設置過濾器值:
當在建立一個PHPExcel簡單的過濾器,你只須要爲「選中」列中指定的值:你經過爲每一個值過濾規則作到這一點。
$columnFilter->createRule()
->setRule(
PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
'France'
);
$columnFilter->createRule()
->setRule(
PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
'Germany'
);
這就形成了兩個過濾規則:列將匹配「法國」或「德」的價值觀進行過濾。對於簡單的過濾器,你能夠建立許多規則,只要你想
簡單的過濾器老是平等的比較匹配,和多個標準過濾器老是經過OR條件被鏈接處理。
4.1.1。匹配空白
若是你想建立一個過濾器,選擇空白單元格,可使用:
$columnFilter->createRule()
->setRule(
PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
''
);
4.2。 DateGroup過濾器
在MS Excel,DateGroup過濾器提供了一系列的下拉過濾器選擇日期值,這樣你就能夠在一年內指定全年或幾個月,或每月內的各個天。
DateGroup篩選器仍然應用爲標準過濾器類型。
$ columnFilter-> setFilterType(
PHPExcel_Worksheet_AutoFilter_Column :: AUTOFILTER_FILTERTYPE_FILTER
);
在建立一個PHPExcel過濾dateGroup,您能夠指定「選中」列中的值做爲今年的關聯數組。月,日,小時,分鐘和秒。要選擇一個年份和月份,你須要建立一個DateGroup規則識別所選擇的年份和月份:
$columnFilter->createRule()
->setRule(
PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
array(
'year' => 2012,
'month' => 1
)
)
->setRuleType(
PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP
);
對於關聯數組的鍵值:
• year
• month
• day
• hour
• minute
• second
像標準的過濾器,過濾器DateGroup老是平等的比賽,和多個標準過濾器老是經過OR條件被鏈接處理。
請注意,咱們ALSE指定ruleType:從標準的過濾區分這一點,咱們明確地設置規則的類型來AUTOFILTER_RULETYPE_DATEGROUP。與標準的過濾器,咱們能夠建立任意數量DateGroup過濾器。
4.3。自定義過濾器
在MS Excel,自定義過濾器容許咱們使用操做符和一個值來選擇更復雜的條件。典型的例子能夠是落入範圍(例如-20和+20之間)內的值,或與通配符(例如用字母U開頭)文本值。爲了解決這個問題,他們
自定義過濾器被限制爲2的規則,它們可使用任一AND或一個OR接合。
咱們經過指定濾波器類型,這個時候CUSTOMFILTER開始。
$columnFilter->setFilterType(
PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER
);
而後定義咱們的規則。
下面顯示了一個簡單的過濾器通配符顯示以字母「U」開頭的全部列項。
$columnFilter->createRule()
->setRule(
PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
'U*'
)
->setRuleType(
PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER
);
MS Excel使用*做爲通配符匹配任何數目的字符,和?做爲通配符來匹配單個字符。 「U *」至關於「用」U「開始」; 「* U」等同於「與」U「結束」;和「* U *」等同於「包含了一個'U'」
若是您想對一個*或一個明確的匹配嗎?字符,你能夠用一個符號(〜)逃避它,因此?〜**就明確匹配*字符做爲單元格的值的第二個字符,後跟任意數目的其它字符。須要轉義惟一的其餘字符是〜自己。
要創造條件「之間」,咱們須要定義兩個規則:
$columnFilter->createRule()
->setRule(
PHPExcel_Worksheet_AutoFilter_Column_Rule::
AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL,
-20
)
->setRuleType(
PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER
);
$columnFilter->createRule()
->setRule(
PHPExcel_Worksheet_AutoFilter_Column_Rule::
AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL,
20
)
->setRuleType(
PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER
);
咱們還設置了規則類型CUSTOMFILTER。
這定義了兩個規則,過濾中,> = -20 OR <= 20個數字,因此咱們還須要修改鏈接條件,以反映而非OR。
$columnFilter->setAndOr(
PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_COLUMN_ANDOR_AND
);
運營商自定義過濾器的有效集是在PHPExcel_Worksheet自動篩選列規則類定義,包括:
AUTOFILTER_COLUMN_RULE_EQUAL = 'equal';
AUTOFILTER_COLUMN_RULE_NOTEQUAL = 'notEqual';
AUTOFILTER_COLUMN_RULE_GREATERTHAN = 'greaterThan';
AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL = 'greaterThanOrEqual';
AUTOFILTER_COLUMN_RULE_LESSTHAN = 'lessThan';
AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL = 'lessThanOrEqual';
4.4。動態過濾器
動態過濾器都是基於一個動態的比較條件,在這裏咱們要對單元格值比較值是可變的,如「今天」;或者當咱們正在測試對單元格數據(例如'aboveAverage')的集合。只有一個動態濾波器能夠同時施加到列。
一樣,咱們經過指定濾波器類型,這個時候DYNAMICFILTER開始。
$columnFilter->setFilterType(
PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_DYNAMICFILTER
);
當定義一個動態過濾規則,咱們沒有定義的值(咱們能夠簡單地設置爲NULL),但咱們作的指定動態過濾類別。
$columnFilter->createRule()
->setRule(
PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
NULL,
PHPExcel_Worksheet_AutoFilter_Column_Rule::
AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE
)
->setRuleType(
PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMICFILTER
);
咱們還設置了規則類型DYNAMICFILTER。
動態過濾器類別的有效集是在PHPExcel_Worksheet_AutoFilter_Column_Rule類中定義,而且包括:
AUTOFILTER_RULETYPE_DYNAMIC_YESTERDAY = 'yesterday';
AUTOFILTER_RULETYPE_DYNAMIC_TODAY = 'today';
AUTOFILTER_RULETYPE_DYNAMIC_TOMORROW = 'tomorrow';
AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE = 'yearToDate';
AUTOFILTER_RULETYPE_DYNAMIC_THISYEAR = 'thisYear';
AUTOFILTER_RULETYPE_DYNAMIC_THISQUARTER = 'thisQuarter';
AUTOFILTER_RULETYPE_DYNAMIC_THISMONTH = 'thisMonth';
AUTOFILTER_RULETYPE_DYNAMIC_THISWEEK = 'thisWeek';
AUTOFILTER_RULETYPE_DYNAMIC_LASTYEAR = 'lastYear';
AUTOFILTER_RULETYPE_DYNAMIC_LASTQUARTER = 'lastQuarter';
AUTOFILTER_RULETYPE_DYNAMIC_LASTMONTH = 'lastMonth';
AUTOFILTER_RULETYPE_DYNAMIC_LASTWEEK = 'lastWeek';
AUTOFILTER_RULETYPE_DYNAMIC_NEXTYEAR = 'nextYear';
AUTOFILTER_RULETYPE_DYNAMIC_NEXTQUARTER = 'nextQuarter';
AUTOFILTER_RULETYPE_DYNAMIC_NEXTMONTH = 'nextMonth';
AUTOFILTER_RULETYPE_DYNAMIC_NEXTWEEK = 'nextWeek';
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_1 = 'M1';
AUTOFILTER_RULETYPE_DYNAMIC_JANUARY = 'M1';
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_2 = 'M2';
AUTOFILTER_RULETYPE_DYNAMIC_FEBRUARY = 'M2';
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_3 = 'M3';
AUTOFILTER_RULETYPE_DYNAMIC_MARCH = 'M3';
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_4 = 'M4';
AUTOFILTER_RULETYPE_DYNAMIC_APRIL = 'M4';
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_5 = 'M5';
AUTOFILTER_RULETYPE_DYNAMIC_MAY = 'M5';
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_6 = 'M6';
AUTOFILTER_RULETYPE_DYNAMIC_JUNE = 'M6';
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_7 = 'M7';
AUTOFILTER_RULETYPE_DYNAMIC_JULY = 'M7';
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_8 = 'M8';
AUTOFILTER_RULETYPE_DYNAMIC_AUGUST = 'M8';
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_9 = 'M9';
AUTOFILTER_RULETYPE_DYNAMIC_SEPTEMBER = 'M9';
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_10 = 'M10';
AUTOFILTER_RULETYPE_DYNAMIC_OCTOBER = 'M10';
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_11 = 'M11';
AUTOFILTER_RULETYPE_DYNAMIC_NOVEMBER = 'M11';
AUTOFILTER_RULETYPE_DYNAMIC_MONTH_12 = 'M12';
AUTOFILTER_RULETYPE_DYNAMIC_DECEMBER = 'M12';
AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_1 = 'Q1';
AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_2 = 'Q2';
AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_3 = 'Q3';
AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_4 = 'Q4';
AUTOFILTER_RULETYPE_DYNAMIC_ABOVEAVERAGE = 'aboveAverage';
AUTOFILTER_RULETYPE_DYNAMIC_BELOWAVERAGE = 'belowAverage'
咱們只能夠一次申請一個動態過濾規則的列。
4.5。十大過濾器
十佳過濾相似的,由於它們是基於在細胞中的實際數據值的summarisation動態過濾器。然而,與動態過濾器,你只能選擇一個單選項,十佳過濾器容許您根據一些標準進行選擇:
•您能夠識別您是否但願頂部(最高)或底部(最低)值。
•您能夠識別你但願有多少值在過濾器選擇
•您能夠識別是否這應該是一個個或多個項目。
像動態過濾器,只有一個單一的十大濾波器能夠同時施加到列。
咱們經過指定濾波器類型,這個時候DYNAMICFILTER開始。
$columnFilter->setFilterType( PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_TOPTENFILTER
);
而後,咱們建立規則:
$columnFilter->createRule()
->setRule(
PHPExcel_Worksheet_AutoFilter_Column_Rule::
AUTOFILTER_COLUMN_RULE_TOPTEN_PERCENT,
5,
PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_TOP
)
->setRuleType(
PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_TOPTENFILTER
);
這將在列篩選值的前5%。
要指定最低(底部2個值),咱們會指定的規則:
$columnFilter->createRule()
->setRule(
PHPExcel_Worksheet_AutoFilter_Column_Rule::
AUTOFILTER_COLUMN_RULE_TOPTEN_BY_VALUE,
5,
PHPExcel_Worksheet_AutoFilter_Column_Rule::
AUTOFILTER_COLUMN_RULE_TOPTEN_BOTTOM
)
->setRuleType(
PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_TOPTENFILTER
);
對於TOPTEN過濾器頂部/底部值/百分比選項值在PHPExcel_Worksheet_AutoFilter_Column_Rule類的全部定義,包括:
AUTOFILTER_COLUMN_RULE_TOPTEN_BY_VALUE = 'byValue';
AUTOFILTER_COLUMN_RULE_TOPTEN_PERCENT = 'byPercent';
and
AUTOFILTER_COLUMN_RULE_TOPTEN_TOP = 'top';
AUTOFILTER_COLUMN_RULE_TOPTEN_BOTTOM = 'bottom';
5.執行自動篩選
當一個自動篩選在MS Excel應用,它設置隱藏/可見標誌基礎上,選擇的標準自動篩選區域的各行的行,這樣,只顯示那些符合過濾條件的行。
當您設置或更改過濾器表達式,但只有當文件被保存PHPExcel不會自動執行同等功能。
5.1。應用過濾器
若是你想從腳本內執行的過濾器,你須要手動完成。您可使用自動篩選showHideRows()方法作到這一點。
$autoFilter = $objPHPExcel->getActiveSheet()->getAutoFilter();
$autoFilter->showHideRows();
經過在行自動篩選區域循環簡單的將仍然可以訪問曾經排,無論它符合過濾標準與否。要選擇性地只訪問過濾行,你須要測試每行的可見性設置。
foreach ($objPHPExcel->getActiveSheet()->getRowIterator() as $row) {
if ($objPHPExcel->getActiveSheet()->getRowDimension($row->getRowIndex())->getVisible()) {
echo ' Row number - ' , $row->getRowIndex() , ' ';
echo $objPHPExcel->getActiveSheet()->getCell(
'C'.$row->getRowIndex()
)->getValue(), ' ';
echo $objPHPExcel->getActiveSheet()->getCell(
'D'.$row->getRowIndex()
)->getFormattedValue(), ' ';
echo EOL;
}
}
6.自動篩選排序
在MS Excel中,自動篩選還容許行進行排序。此功能不支持PHPExcel。