2019年10月11日14:09:40php
将PhpSpreadsheet文件包含在脚本中以后,可是在实例化Spreadsheet
对象或加载工做簿文件以前,能够设置许多配置选项,这些配置选项将影响脚本的后续行为。缓存
默认状况下,PhpSpreadsheet将全部单元格对象保留在内存中,可是您能够指定替代方法来以下降速度为代价来减小内存消耗。阅读有关内存节省的更多信息。spa
为了使细胞缓存,您必须提供本身的实现,像这样的缓存:code
$cache = new MyCustomPsr16Implementation(); \PhpOffice\PhpSpreadsheet\Settings::setCache($cache);
PhpSpreadsheet中已包含一些本地化元素。您能够经过更改设置来设置语言环境。要将语言环境设置为巴西葡萄牙语,请使用:orm
$locale = 'pt_br'; $validLocale = \PhpOffice\PhpSpreadsheet\Settings::setLocale($locale); if (!$validLocale) { echo 'Unable to set locale to ' . $locale . " - reverting to en_us" . PHP_EOL; }
setLocale()
方法将返回错误,而且将始终使用美式英语(en_us)设置。设置语言环境后,能够使用可用功能的更多详细信息,包括当前支持的语言和语言环境列表,能够在“公式的语言环境设置”中找到。对象
工做表是单元格,公式,图像,图形等的集合。它包含表明电子表格工做表所需的全部数据。排序
当您从电子表格文件加载工做簿时,它将与全部现有工做表一块儿加载(除非您指定仅应加载某些工做表)。从非电子表格文件(例如CSV或HTML文件)或没法经过名称识别工做表的电子表格格式(例如SYLK)加载时,将建立一个名为“ WorkSheet1”的工做表,其中包含来自该文件。索引
当您实例化一个新的工做簿时,PhpSpreadsheet将使用一个名为“ WorkSheet1”的工做表来建立它。ip
该getSheetCount()
方法将告诉您工做簿中工做表的数量。而该getSheetNames()
方法将返回工做簿中全部工做表的列表,并按在MS Excel(或其余适当的Spreadsheet程序)中打开时其“选项卡”出现的顺序编制索引。内存
能够经过名称或在工做簿中的索引位置访问各个工做表。索引位置表明在MS Excel(或其余适当的电子表格程序)中打开工做簿时显示每一个工做表“标签”的顺序。要经过工做表的索引访问工做表,请使用getSheet()
方法。
// Get the second sheet in the workbook // Note that sheets are indexed from 0 $spreadsheet->getSheet(1);
还存在容许您在工做簿中对工做表进行从新排序的方法。
要按名称访问工做表,请使用getSheetByName()
方法,指定要访问的工做表的名称。
// Retrieve the worksheet called 'Worksheet 1' $spreadsheet->getSheetByName('Worksheet 1');
或者,一个工做表始终是当前活动的工做表,您能够直接访问该工做表。当前活动的工做表是在MS Excel(或其余适当的Spreadsheet程序)中打开工做簿时将处于活动状态的工做表。
// Retrieve the current active worksheet $spreadsheet->getActiveSheet();
您能够使用setActiveSheetIndex()
和setActiveSheetIndexByName()
方法经过索引或名称更改当前活动的工做表 。
您能够使用对象的createSheet()
方法向工做簿中添加一个新的工做表Spreadsheet
。默认状况下,它将被建立为新的“最后”工做表;但您也能够将索引位置指定为参数,而后工做表将插入该位置,从而将集合中全部后续工做表拖到一个位置。
$spreadsheet->createSheet();
使用此方法建立的新工做表将被调用 Worksheet<n>
,其中where <n>
是保证标题惟一的最低编号。
或者,您能够实例化一个新的工做表(将标题设置为您选择的名称),而后使用该addSheet()
方法将其插入工做簿中 。
// Create a new worksheet called "My Data" $myWorkSheet = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet($spreadsheet, 'My Data'); // Attach the "My Data" worksheet as the first worksheet in the Spreadsheet object $spreadsheet->addSheet($myWorkSheet, 0);
若是未将索引位置指定为第二个参数,则新工做表将添加到最后一个现有工做表以后。
能够经过建立要复制的工做表的副本,而后使用addSheet()
将该副本插入工做簿的方法来复制同一工做簿中的工做表。
$clonedWorksheet = clone $spreadsheet->getSheetByName('Worksheet 1'); $clonedWorksheet->setTitle('Copy of Worksheet 1'); $spreadsheet->addSheet($clonedWorksheet);
您还能够将工做表从一个工做簿复制到另外一个工做簿,尽管这更加复杂,由于PhpSpreadsheet还必须在两个工做簿之间复制样式。addExternalSheet()
为此提供了该方法。
$clonedWorksheet = clone $spreadsheet1->getSheetByName('Worksheet 1'); $spreadsheet->addExternalSheet($clonedWorksheet);
在这两种状况下,开发人员都有责任确保工做表名称不重复。若是您尝试复制将致使名称重复的工做表,则PhpSpreadsheet将引起异常。
您能够使用如下removeSheetByIndex()
方法从工做簿中删除工做表,该工做表由其索引位置标识
$sheetIndex = $spreadsheet->getIndex( $spreadsheet->getSheetByName('Worksheet 1') ); $spreadsheet->removeSheetByIndex($sheetIndex);
若是删除了当前活动的工做表,则位于前一个索引位置的工做表将成为当前活动的工做表。