PHPExcel中文开发手册翻译版(1)

请注意这个是粗翻译版,仅供参考,不是精校版 精校版后面才会更新

英文原版在线文档 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。