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);
若是刪除了當前活動的工做表,則位於前一個索引位置的工做表將成爲當前活動的工做表。