php表格筛选,phpspreadsheet中⽂⽂档(⼆)结构+⾃动筛选2019年10⽉11⽇13:55:41
原理图
⾃动加载器
PhpSpreadsheet依赖于Compor⾃动加载器。因此,在独⽴使⽤PhpSpreadsheet之前,请确保先运⾏compor install。或使⽤将其添加到预先存在的项⽬中compor require phpoffice/phpspreadsheet。
电⼦表格在内存中
PhpSpreadsheet的体系结构以可以⽤作内存电⼦表格的⽅式构建。这意味着,如果要创建与PhpSpreadsheet的对象模型进⾏通信的电⼦表格的基于Web的视图,则他只需要编写前端代码即可。
就像桌⾯电⼦表格软件⼀样,PhpSpreadsheet表⽰包含⼀个或多个⼯作表的电⼦表格,该⼯作表包含具有数据,公式,图像等的单元格。
读者和作家
就其本⾝⽽⾔,该Spreadsheet班没有提供的功能读取或写⼊到⼀个持久的电⼦表格(在磁盘或数据库)。为了提供该功能,可以使⽤读取器和写⼊器。
默认情况下,PhpSpreadsheet软件包提供了⼀些读取器和写⼊器,其中包括⼀种⽤于Open XML电⼦表格格式(也称为Excel 2007⽂件格式)的读写器。您不限于默认的读取器和编写器,因为您可以在⾃定义类中⾃由实现
教师招聘简历
投篮手型\PhpOffice\PhpSpreadsheet\Reader\IReaderand\PhpOffice\PhpSpreadsheet\Writer\IWriter接⼝。
流利的界⾯
PhpSpreadsheet在⼤多数位置都⽀持流畅的界⾯。这意味着您可以轻松地“链接”对特定⽅法的调⽤,⽽⽆需新的PHP语句。例如,使⽤以下代码:
$spreadsheet->getProperties()->tCreator("Maarten Balliauw");
$spreadsheet->getProperties()->tLastModifiedBy("Maarten Balliauw");
$spreadsheet->getProperties()->tTitle("Office 2007 XLSX Test Document");
$spreadsheet->getProperties()->tSubject("Office 2007 XLSX Test Document");
$spreadsheet->getProperties()->tDescription("Test document for Office 2007 XLSX, generated using PHP class.");
$spreadsheet->getProperties()->tKeywords("office 2007 openxml php");
$spreadsheet->getProperties()->tCategory("Test result file");
可以改写为:
$spreadsheet->getProperties()
->tCreator("Maarten Balliauw")
->tLastModifiedBy("Maarten Balliauw")
->tTitle("Office 2007 XLSX Test Document")
->tSubject("Office 2007 XLSX Test Document")
->tDescription("Test document for Office 2007 XLSX, generated using PHP class.")
->tKeywords("office 2007 openxml php")
->tCategory("Test result file");
不需要使⽤流利的接⼝已经实现了流利的接⼝以提供⽅便的编程API。不需要使⽤它们,但是可以使您的代码更易于阅读和维护。当您减少对PhpSpreadsheet⽅法的调⽤总数时,它也可以提⾼性能:在上⾯的⽰例中,该getProperties()⽅法仅被调⽤⼀次,⽽不是⾮流利版本中被调⽤7次
⾃动筛选参考
介绍
Excel⼯作簿中的每个⼯作表都可以包含⼀个⾃动筛选范围。筛选的数据仅显⽰符合您指定条件的⾏,并隐藏您不想显⽰的⾏。您可以按不⽌⼀列进⾏过滤:过滤器是加性的,这意味着每个其他过滤器都基于当前过滤器,并进⼀步减少了数据⼦集。
将⾃动过滤器应⽤于⼀定范围的单元格时,⾃动过滤器范围中的第⼀⾏将是标题⾏,其中显⽰⾃动过滤器下拉图标。它不是实际的⾃动筛选数据的⼀部分。随后的所有⾏都是⾃动过滤的数据。因此,⾃动筛选器范围应始终包含标题⾏和⼀个或多个数据⾏(⼀个数据⾏⼏乎没有意义),但是PhpSpreadsheet并不会阻⽌您指定⽆意义的范围:由开发⼈员⾃⾏决定如何避免此类错误。
要确定是否应⽤了过滤器,请注意列标题中的图标。下拉箭头()表⽰已启⽤过滤但未应⽤过滤。在MS Excel中,当您将⿏标悬停在启⽤了过滤但未应⽤过滤的列的标题上时,屏幕提⽰将显⽰该列第⼀⾏的单元格⽂本,并显⽰消息“(显⽰全部)”。
“过滤器”按钮()表⽰已应⽤过滤器。将⿏标悬停在已过滤列的标题上时,屏幕提⽰会显⽰已应⽤于该列的过滤器,例如“等于红⾊单元格颜⾊”或“⼤于150”。
在⼯作表上设置⼀个⾃动筛选区域
在⼀系列单元格上设置⾃动过滤器。
$spreadsheet->getActiveSheet()->tAutoFilter('A1:E20');
⾃动过滤器范围的第⼀⾏将是标题⾏,其中显⽰⾃动过滤器下拉图标。它不是实际的⾃动筛选数据的⼀部分。随后的所有⾏都是⾃动过滤的数据。因此,⾃动筛选器范围应始终包含标题⾏和⼀个或多个数据⾏(⼀个数据⾏是毫⽆意义的,但是PhpSpreadsheet并不会阻⽌您指定⼀个⽆意义的范围:这取决于开发⼈员如何避免此类错误。
如果要将整个⼯作表设置为⾃动筛选区域
$spreadsheet->getActiveSheet()->tAutoFilter(
$spreadsheet->getActiveSheet()
->calculateWorksheetDimension()
);
这样可以进⾏过滤,但实际上不应⽤任何过滤器。伴奏音乐大全
⾃动过滤器表达式
PHPEXcel 1.7.8引⼊了实际创建,读取和写⼊过滤器表达式的功能;最初仅适⽤于Xlsx⽂件,但更⾼版本会将其扩展为其他格式。
要将过滤器表达式应⽤于autoFilter范围,⾸先需要确定要将此过滤器应⽤于哪⼀列。
$autoFilter = $spreadsheet->getActiveSheet()->getAutoFilter();
$columnFilter = $autoFilter->getColumn('C');
这将返回⼀个autoFilter列对象,然后您可以将过滤器表达式应⽤于该列。
有许多不同类型的⾃动过滤器表达式。最常⽤的是:
简单过滤器
⽇期组过滤器
⾃定义过滤器民主生活会意见表
动态滤镜
⼗⼤筛选器
这些不同类型在任何单个列中都是互斥的。您不应在同⼀列中混合使⽤不同类型的过滤器。PhpSpreadsheet不会主动阻⽌您执⾏此操作,但是结果是不可预测的。
尚不⽀持其他过滤器表达式类型(例如单元格颜⾊过滤器)。
简单的过滤器
下班用英语怎么说在MS Excel中,“简单过滤器”是该列中使⽤的所有值的下拉列表,⽤户可以通过选中和取消选中每个选项旁边的复选框来选择要显⽰的值和要隐藏的值。应⽤过滤器时,将显⽰包含已选中条⽬的⾏,不包含那些值的⾏将被隐藏。
要创建过滤器表达式,我们需要先确定过滤器类型。在这种情况下,我们将仅指定此过滤器为标准过滤器。
$columnFilter->tFilterType(
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column::AUTOFILTER_FILTERTYPE_FILTER
);
现在我们已经确定了过滤器类型,我们可以创建过滤器规则并设置过滤器值:
在PhpSpreadsheet中创建简单过滤器时,只需指定“已检查”列的值即可:您可以通过为每个值创建过滤器规则来做到这⼀点。
$columnFilter->createRule()
->tRule(
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
'France'
);
$columnFilter->createRule()
->tRule(
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
'Germany'
);
这将创建两个过滤规则:该列将使⽤与“ France”或“ Germany”匹配的值进⾏过滤。对于简单过滤器,您可以根据需要创建任意多个规则
简单过滤器始终是EQUALS的⽐较匹配,⽽多个标准过滤器始终被视为由OR条件连接。
配套空⽩
如果要创建过滤器以选择空⽩单元格,则可以使⽤:
$columnFilter->createRule()
->tRule(
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_EQUAL,狼人杀金水
''
个体户要交哪些税);
⽇期组过滤器
在MS Excel中,DateGroup筛选器为⽇期值提供了⼀系列下拉筛选器选择器,因此您可以指定整个年份或⼀年中的⼏个⽉,或每个⽉中的⼏天。
DateGroup筛选器仍作为标准筛选器类型应⽤。
$columnFilter->tFilterType(
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column::AUTOFILTER_FILTERTYPE_FILTER
);
在PhpSpreadsheet中创建⼀个dateGroup过滤器,您可以将“选中”列的值指定为年份的关联数组。⽉,⽇,⼩时,分钟和秒。要选择年份和⽉份,您需要创建⼀个DateGroup规则来标识所选的年份和⽉份:
$columnFilter->createRule()
理财金字塔-
>tRule(
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
[
'year' => 2012,
'month' => 1
]
)
->tRuleType(
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_DATEGROUP
);
关联数组的键值为:
年
⽉
天
⼩时
分钟
第⼆
与标准过滤器⼀样,DateGroup过滤器始终是EQUALS的匹配项,并且多个标准过滤器始终被视为由OR条件联接。
请注意,我们还指定了ruleType:为了将其与标准过滤器区分开来,我们将Rule's Type显式设置为
AUTOFILTER_RULETYPE_DATEGROUP。与标准过滤器⼀样,我们可以创建任意数量的DateGroup过滤器。
⾃定义过滤器
在MS Excel中,⾃定义过滤器允许我们使⽤运算符和值来选择更复杂的条件。典型⽰例可能是落⼊某个范围内的值(例如-20⾄+20之间),或者是带有通配符的⽂本值(例如以字母U开头)。为了解决这个问题,他们
⾃定义过滤器限制为2个规则,可以使⽤AND或OR将它们结合在⼀起。
我们从指定过滤器类型开始,这次是CUSTOMFILTER。
$columnFilter->tFilterType(
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER
);
然后定义我们的规则。
下⾯显⽰了⼀个简单的通配符过滤器,以显⽰所有以字母开头的列条⽬U。
$columnFilter->createRule()
->tRule(
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
'U*'
)
->tRuleType(
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER
);
MS Excel使⽤*作为通配符来匹配任意数量的字符,并且?作为匹配单个字符的通配符。“ U *”等于“以'U'开头”;'* U'等于“以'U'结尾”;“ * U *”等于“包含'U'”
如果要显式匹配*或?字符,您可以使⽤波浪号(\〜)对其进⾏转义,因此?\〜**将显式匹配*字符作为单元格值中的第⼆个字符,后跟任意数量的其他字符。唯⼀需要转义的其他字符是\〜本⾝。
要创建“介于”条件,我们需要定义两个规则:
$columnFilter->createRule()
->tRule(
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL,
-20
)
->tRuleType(
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER
);
$columnFilter->createRule()
->tRule(
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL,
20
)
->tRuleType(
\PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER
);
我们还将规则类型设置为CUSTOMFILTER。