2019年10月11日14:09:40
配置設定
將PhpSpreadsheet文件包含在腳本中之后,但是在實例化Spreadsheet
對象或加載工作簿文件之前,可以設置許多配置選項,這些配置選項將影響腳本的后續行為。
單元格收集緩存
默認情況下,PhpSpreadsheet將所有單元格對象保留在內存中,但是您可以指定替代方法來以降低速度為代價來減少內存消耗。閱讀有關內存節省的更多信息。
為了使細胞緩存,您必須提供自己的實現,像這樣的緩存:
$cache = new MyCustomPsr16Implementation(); \PhpOffice\PhpSpreadsheet\Settings::setCache($cache);
語言/地區
PhpSpreadsheet中已包含一些本地化元素。您可以通過更改設置來設置語言環境。要將語言環境設置為巴西葡萄牙語,請使用:
$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”的工作表來創建它。
該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);
如果刪除了當前活動的工作表,則位於前一個索引位置的工作表將成為當前活動的工作表。