phpspreadsheet 中文文檔(七)技巧和訣竅

2019年10月11日14:08:35php

 

如下頁面爲您提供了一些使用普遍的PhpSpreadsheet食譜。請注意,這些文件沒有提供有關特定PhpSpreadsheet API函數的完整文檔,而只是一個起步。若是您須要特定的API函數,請參閱API文檔git

例如,設置工做表的頁面方向和大小可 將頁面方向設置爲A4。其餘紙張格式(例如US Letter)不在本文檔中討論,而是在PhpSpreadsheet API文檔中討論github

設置電子表格的元數據

PhpSpreadsheet提供了一種使用文檔屬性訪問器來設置電子表格的元數據的簡便方法。電子表格元數據可用於在文件存儲庫或文檔管理系統中查找特定文檔。例如,Microsoft Sharepoint使用文檔元數據在其文檔列表中搜索特定文檔。web

設置電子表格元數據的操做以下:編程

$spreadsheet->getProperties() ->setCreator("Maarten Balliauw") ->setLastModifiedBy("Maarten Balliauw") ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription( "Test document for Office 2007 XLSX, generated using PHP classes." ) ->setKeywords("office 2007 openxml php") ->setCategory("Test result file"); 

設置電子表格的活動工做表

如下代碼行將活動工做表索引設置爲第一工做表:數組

$spreadsheet->setActiveSheetIndex(0); 

您還能夠按其名稱/標題設置活動工做表瀏覽器

$spreadsheet->setActiveSheetIndexByName('DataSheet') 

將當前活動的工做表更改成名爲「 DataSheet」的工做表。安全

將日期或時間寫入單元格

在Excel中,日期和時間存儲爲數字值,用於計算自1900-01-01起通過的天數。例如,日期'2008-12-31'表示爲39813。您能夠在Microsoft Office Excel中對此日期進行驗證,方法是在單元格中輸入該日期,而後將數字格式更改成「常規」,以便顯示真實的數值。一樣,「 3:15 AM」表示爲0.135417。app

PhpSpreadsheet使用UST(通用標準時間)日期和時間值,但不進行內部轉換。所以,開發人員應確保傳遞給日期/時間轉換函數的值是UST。less

在單元格中寫入日期值由兩行代碼組成。選擇最適合您的方法。這裏有些例子:

// MySQL-like timestamp '2008-12-31' or date string \PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder() ); $spreadsheet->getActiveSheet() ->setCellValue('D1', '2008-12-31'); $spreadsheet->getActiveSheet()->getStyle('D1') ->getNumberFormat() ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDDSLASH); // PHP-time (Unix time) $time = gmmktime(0,0,0,12,31,2008); // int(1230681600) $spreadsheet->getActiveSheet() ->setCellValue('D1', \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($time)); $spreadsheet->getActiveSheet()->getStyle('D1') ->getNumberFormat() ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDDSLASH); // Excel-date/time $spreadsheet->getActiveSheet()->setCellValue('D1', 39813) $spreadsheet->getActiveSheet()->getStyle('D1') ->getNumberFormat() ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDDSLASH); 

上面輸入日期的方法都會產生相同的結果。 \PhpOffice\PhpSpreadsheet\Style\NumberFormat提供了許多預約義的日期格式。

\PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel()方法還能夠與PHP DateTime對象一塊兒使用。

相似地,能夠以相同的方式輸入時間(或日期和時間值):只需記住使用適當的格式代碼便可。

注意:

請參閱「使用值綁定器促進數據輸入」一節,以瞭解有關第一個示例中使用的AdvancedValueBinder的更多信息。Excel也能夠在基於1904年的日曆中運行(Mac上保存的工做簿的默認設置)。一般,使用PhpSpreadsheet時沒必要擔憂這一點。

將公式寫入單元格

在Excel文件中,公式老是按照在Microsoft Office Excel英文版中出現的方式存儲,而且PhpSpreadsheet在內部以這種格式處理全部公式。這意味着如下規則成立:

  • 小數點分隔符爲.(句號)
  • 函數參數分隔符爲,(逗號)
  • 矩陣行分隔符是;(分號)
  • 必須使用英文功能名稱

無論使用哪一種語言版本的Microsoft Office Excel來建立Excel文件。

當用戶打開最終工做簿時,Microsoft Office Excel將負責根據應用程序語言顯示公式。應用程序負責翻譯!

下面的代碼行將公式 =IF(C4>500,"profit","loss")寫入單元格B8中。請注意,公式必須=以使PhpSpreadsheet將此公式識別爲開頭。

$spreadsheet->getActiveSheet()->setCellValue('B8','=IF(C4>500,"profit","loss")'); 

若是要向=單元格中寫入以字符開頭的字符串,則應使用該setCellValueExplicit()方法。

$spreadsheet->getActiveSheet() ->setCellValueExplicit( 'B8', '=IF(C4>500,"profit","loss")', \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING ); 

可使用如下代碼行再次讀取單元格的公式:

$formula = $spreadsheet->getActiveSheet()->getCell('B8')->getValue(); 

若是須要計算出的像元值,請使用如下代碼。這將在計算引擎中進一步說明

$value = $spreadsheet->getActiveSheet()->getCell('B8')->getCalculatedValue(); 

公式的區域設置

PhpSpreadsheet中已包含一些本地化元素。您能夠經過更改設置來設置語言環境。要將語言環境設置爲俄語,請使用:

$locale = 'ru'; $validLocale = \PhpOffice\PhpSpreadsheet\Settings::setLocale($locale); if (!$validLocale) { echo 'Unable to set locale to '.$locale." - reverting to en_us<br />\n"; } 

若是沒有俄文文件,則該setLocale()方法將返回錯誤,而且將始終使用英語設置。

設置區域設置後,您能夠從公式的內部英語編碼中翻譯出該公式。

$formula = $spreadsheet->getActiveSheet()->getCell('B8')->getValue(); $translatedFormula = \PhpOffice\PhpSpreadsheet\Calculation\Calculation::getInstance()->_translateFormulaToLocale($formula); 

您也可使用適合於已定義語言環境的函數名稱和參數分隔符來建立公式;而後在設置單元格值以前將其翻譯爲英語:

$formula = '=ДНЕЙ360(ДАТА(2010;2;5);ДАТА(2010;12;31);ИСТИНА)'; $internalFormula = \PhpOffice\PhpSpreadsheet\Calculation\Calculation::getInstance()->translateFormulaToEnglish($formula); $spreadsheet->getActiveSheet()->setCellValue('B8',$internalFormula); 

當前,公式轉換僅轉換函數名稱,常量TRUE和FALSE以及函數參數分隔符。

當前,支持如下語言環境設置:

語言   區域代碼
捷克文 切什蒂納 cs
丹麥文 丹斯克 DA
德語 德意志
西班牙文 西班牙文 es
芬蘭 omi美 科幻
法文 法蘭西 fr
匈牙利 馬蓋爾
義大利文 意大利語
荷蘭人 荷蘭 nl
挪威 挪威語 沒有
拋光 耶茲克·波爾斯基 PL
葡萄牙語 葡萄牙語 pt
巴西葡萄牙語 PortuguêsBrasileiro pt_br
俄語 русскийязык RU
瑞典 斯文斯卡 sv
土耳其 圖爾克 TR

在單元格中寫入換行符「 \ n」(ALT +「 Enter」)

在Microsoft Office Excel中,您能夠經過按ALT +「 Enter」在單元格中換行。當您這樣作時,它會自動爲該單元格打開「自動換行」。

這是在PhpSpreadsheet中實現此目標的方法:

$spreadsheet->getActiveSheet()->getCell('A1')->setValue("hello\nworld"); $spreadsheet->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true); 

小費

閱讀更多有關使用getStyle()其餘地方格式化單元格的信息

小費

當AdvancedValuebinder.php在要插入單元格的字符串中看到換行符時,會自動爲該單元格打開「自動換行」。就像Microsoft Office Excel同樣。嘗試這個:

\PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder() ); $spreadsheet->getActiveSheet()->getCell('A1')->setValue("hello\nworld"); 

在其餘地方閱讀有關AdvancedValueBinder.php的更多信息。

明確設置單元格的數據類型

您可使用單元格的setValueExplicit方法或工做表的setCellValueExplicit方法顯式設置單元格的數據類型。這是一個例子:

$spreadsheet->getActiveSheet()->getCell('A1') ->setValueExplicit( '25', \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_NUMERIC ); 

將單元格更改成可點擊的網址

您能夠經過設置單元格的超連接屬性來使其成爲可點擊的URL:

$spreadsheet->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net'); $spreadsheet->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('https://www.example.com'); 

若是要創建到另外一個工做表/單元格的超連接,請使用如下代碼:

$spreadsheet->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net'); $spreadsheet->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl("sheet://'Sheetname'!A1"); 

設置Excel文件的打印機選項

設置工做表的頁面方向和大小

可使用如下代碼行來設置工做表的頁面方向和大小:

$spreadsheet->getActiveSheet()->getPageSetup() ->setOrientation(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_LANDSCAPE); $spreadsheet->getActiveSheet()->getPageSetup() ->setPaperSize(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::PAPERSIZE_A4); 

請注意,還有其餘頁面設置可用。有關全部可能的選項,請參考API文檔

頁面設置:縮放選項

如圖所示,PhpSpreadsheet中的頁面設置縮放選項與「頁面設置」對話框中的縮放選項直接相關。

如圖所示,PhpSpreadsheet中的默認值對應於MS Office Excel中的默認值。

08-page-setup-scaling-options.png

方法 初始值 調用方法將觸發 注意
setFitToPage(...) --  
setScale(...) 100 setFitToPage(FALSE)  
setFitToWidth(...) 1個 setFitToPage(TRUE) 值0表示不適合寬度
setFitToHeight(...) 1個 setFitToPage(TRUE) 值0表示不適合身高

這是如何適合無限寬的1頁寬的頁面:

$spreadsheet->getActiveSheet()->getPageSetup()->setFitToWidth(1); $spreadsheet->getActiveSheet()->getPageSetup()->setFitToHeight(0); 

如您所見,因爲setFitToWidth(...)和setFitToHeight(...)會觸發此操做,所以沒必要調用setFitToPage(TRUE)。

若是使用setFitToWidth(),一般還應setFitToHeight()像示例中那樣明確指定 注意依賴於初始值。

頁邊距

要爲工做表設置頁邊距,請使用如下代碼:

$spreadsheet->getActiveSheet()->getPageMargins()->setTop(1); $spreadsheet->getActiveSheet()->getPageMargins()->setRight(0.75); $spreadsheet->getActiveSheet()->getPageMargins()->setLeft(0.75); $spreadsheet->getActiveSheet()->getPageMargins()->setBottom(1); 

請注意,邊距值以英寸爲單位指定。

08-page-setup-margins.png

將頁面水平/垂直居中

要將頁面水平/垂直居中,可使用如下代碼:

$spreadsheet->getActiveSheet()->getPageSetup()->setHorizontalCentered(true); $spreadsheet->getActiveSheet()->getPageSetup()->setVerticalCentered(false); 

可使用如下代碼行來設置工做表的打印頁眉和頁腳:

$spreadsheet->getActiveSheet()->getHeaderFooter() ->setOddHeader('&C&HPlease treat this document as confidential!'); $spreadsheet->getActiveSheet()->getHeaderFooter() ->setOddFooter('&L&B' . $spreadsheet->getProperties()->getTitle() . '&RPage &P of &N'); 

替換和格式代碼(以&開頭)能夠在頁眉和頁腳中使用。這些代碼沒有必需的順序。

下列代碼的第一次出現將格式設置打開,第二次出現再次將其關閉:

  • 刪除線
  • 上標
  • 下標

上標和下標不能同時打開。誰先贏,誰就被忽略,而先贏。

Xlsx支持如下代碼:

含義
&L 「左部分」的代碼(有三個頁眉/頁腳位置,「左」,「中心」和「右」)。當存在兩個或兩個以上的此部分標記時,全部標記的內容按照出現的順序鏈接在一塊兒,並放在左側部分中。
&P 「當前頁號」的代碼
&N 「總頁數」的代碼
&font size 「文本字體大小」的代碼,其中字體大小是以磅爲單位的字體大小。
&K 「文本字體顏色」的代碼-RGB顏色指定爲RRGGBB主題顏色指定爲TTSNN,其中TT是主題顏色ID,S是色調/陰影值的「 +」或「-」,NN是色調/陰影值。
&S 開啓/關閉「文本刪除線」的代碼
&X 打開/關閉「文本超級腳本」的代碼
&Y 開/關「文本下標」的代碼
&C 代碼爲「中心部分」。當存在兩個或兩個以上的此部分標記時,全部標記的內容按照出現的順序鏈接在一塊兒,並放置在中間部分。
&D 代碼爲「日期」
&T 代碼爲「時間」
&G 「圖片做爲背景」的代碼-請確保將圖片添加到頁眉/頁腳(請參見圖片提示)
&U 代碼爲「文本下劃線」
&E 代碼爲「雙下劃線」
&R 代碼爲「右側部分」。當存在兩個或兩個以上的此部分標記時,全部標記的內容按照出現的順序鏈接在一塊兒,並放置在右側部分中。
&Z 「此工做簿的文件路徑」的代碼
&F 「此工做簿的文件名」的代碼
&A 「工做表標籤名稱」的代碼
&+ 添加到頁面#的代碼
&- 從頁碼中減去的代碼
&"font name,font type" 「文本字體名稱」和「文本字體類型」的代碼,其中字體名稱和字體類型是指定字體名稱和類型的字符串,以逗號分隔。字體名稱中出現連字符時,表示「未指定」。字體名稱和字體類型均可以是本地化的值。
&"-,Bold" 「粗體字體樣式」的代碼
&B 「粗體字體樣式」的代碼
&"-,Regular" 「常規字體樣式」的代碼
&"-,Italic" 「斜體字體樣式」的代碼
&I 「斜體字體樣式」的代碼
&"-,Bold Italic" 代碼爲「粗斜體字體樣式」
&O 代碼爲「大綱樣式」
&H 「陰影樣式」的代碼

小費

上面的代碼表在您第一次嘗試弄清楚如何編寫頁眉或頁腳時彷佛不堪重負。幸運的是,有一種更簡單的方法。讓Microsoft Office Excel爲您完成工做。例如,在Microsoft Office Excel中建立一個xlsx文件,您能夠在其中使用程序本身的界面根據須要插入頁眉和頁腳。將文件另存爲test.xlsx。如今,獲取該文件並使用PhpSpreadsheet讀取值,以下所示:

$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load('test.xlsx'); $worksheet = $spreadsheet->getActiveSheet(); var_dump($worksheet->getHeaderFooter()->getOddFooter()); var_dump($worksheet->getHeaderFooter()->getEvenFooter()); var_dump($worksheet->getHeaderFooter()->getOddHeader()); var_dump($worksheet->getHeaderFooter()->getEvenHeader()); 

這揭示了偶數/奇數頁眉和頁腳的代碼。有經驗的用戶可能會發現將test.xlsx重命名爲test.zip,解壓縮並直接檢查相關xl / worksheets / sheetX.xml的內容以查找頁眉/頁腳的代碼會更容易。

圖片提示

$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooterDrawing(); $drawing->setName('PhpSpreadsheet logo'); $drawing->setPath('./images/PhpSpreadsheet_logo.png'); $drawing->setHeight(36); $spreadsheet->getActiveSheet()->getHeaderFooter()->addImage($drawing, \PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooter::IMAGE_HEADER_LEFT); 

在行或列上設置打印間隔

要設置打印間隔,請使用如下代碼,該代碼在第10行上設置一個行間隔。

$spreadsheet->getActiveSheet()->setBreak('A10', \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::BREAK_ROW); 

如下代碼行在D列上設置了打印中斷:

$spreadsheet->getActiveSheet()->setBreak('D10', \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::BREAK_COLUMN); 

在打印時顯示/隱藏網格線

要在打印時顯示/隱藏網格線,請使用如下代碼:

$spreadsheet->getActiveSheet()->setShowGridlines(true); 

設置行/列在頂部/左側重複

PhpSpreadsheet能夠在頁面頂部/左側重複特定的行/單元格。如下代碼是如何在特定工做表的每一個打印頁面上重複第1至5行的示例:

$spreadsheet->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 5); 

指定打印區域

要指定工做表的打印區域,請使用如下代碼:

$spreadsheet->getActiveSheet()->getPageSetup()->setPrintArea('A1:E5'); 

單個工做表中也能夠有多個打印區域:

$spreadsheet->getActiveSheet()->getPageSetup()->setPrintArea('A1:E5,G4:M20'); 

款式

格式化單元格

可使用字體,邊框,填充,...樣式信息來格式化單元格。例如,能夠將單元的前景色設置爲紅色,並向右對齊,將邊框設置爲黑色和粗邊框樣式。讓咱們在單元格B2上執行此操做:

$spreadsheet->getActiveSheet()->getStyle('B2') ->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED); $spreadsheet->getActiveSheet()->getStyle('B2') ->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT); $spreadsheet->getActiveSheet()->getStyle('B2') ->getBorders()->getTop()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK); $spreadsheet->getActiveSheet()->getStyle('B2') ->getBorders()->getBottom()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK); $spreadsheet->getActiveSheet()->getStyle('B2') ->getBorders()->getLeft()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK); $spreadsheet->getActiveSheet()->getStyle('B2') ->getBorders()->getRight()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK); $spreadsheet->getActiveSheet()->getStyle('B2') ->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID); $spreadsheet->getActiveSheet()->getStyle('B2') ->getFill()->getStartColor()->setARGB('FFFF0000'); 

getStyle()還接受單元格範圍做爲參數。例如,您能夠在一系列單元格上設置紅色背景色:

$spreadsheet->getActiveSheet()->getStyle('B3:B7')->getFill() ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) ->getStartColor()->setARGB('FFFF0000'); 

提示建議使用例如getStyle('A1:M500')一次對許多單元格進行樣式設置,而不是在循環中分別對單元格進行樣式設置。與遍歷單元格和分別設置樣式相比,這要快得多。

還有另外一種設置樣式的方式。如下代碼將單元格的樣式設置爲粗體,右對齊,上邊框細和漸變填充:

$styleArray = [ 'font' => [ 'bold' => true, ], 'alignment' => [ 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT, ], 'borders' => [ 'top' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, ], ], 'fill' => [ 'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_GRADIENT_LINEAR, 'rotation' => 90, 'startColor' => [ 'argb' => 'FFA0A0A0', ], 'endColor' => [ 'argb' => 'FFFFFFFF', ], ], ]; $spreadsheet->getActiveSheet()->getStyle('A3')->applyFromArray($styleArray); 

或帶有一系列單元格:

$spreadsheet->getActiveSheet()->getStyle('B3:B7')->applyFromArray($styleArray); 

每當您設置多個樣式屬性時,這種使用數組的替代方法在執行方面都應該更快。可是,除非工做簿中有許多不一樣的樣式,不然差別幾乎沒法測量。

數字格式

您一般但願在Excel中設置數字格式。例如,您可能須要一個千位分隔符,再在十進制分隔符後加上固定數量的小數。或者,也許您但願某些數字被零填充。

在Microsoft Office Excel中,您可能熟悉從「設置單元格格式」對話框中選擇數字格式的過程。這裏有一些預約義的數字格式,包括一些日期格式。該對話框的設計方式使您無需與基礎原始數字格式代碼進行交互,除非您須要自定義數字格式。

在PhpSpreadsheet中,您還能夠應用各類預約義的數字格式。例:

$spreadsheet->getActiveSheet()->getStyle('A1')->getNumberFormat() ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1); 

這將格式化數字,例如1587.2,所以當您在MS Office Excel中打開工做簿時,它將顯示爲1,587.20。(取決於Microsoft Office Excel中小數和千位分隔符的設置,它可能顯示爲1.587,20)

您可使用如下方法實現與上述徹底相同的效果:

$spreadsheet->getActiveSheet()->getStyle('A1')->getNumberFormat() ->setFormatCode('#,##0.00'); 

在Microsoft Office Excel和PhpSpreadsheet中,每當須要一些特殊的自定義數字格式時,都必須與原始數字格式代碼進行交互。例:

$spreadsheet->getActiveSheet()->getStyle('A1')->getNumberFormat() ->setFormatCode('[Blue][>=3000]$#,##0;[Red][<0]$#,##0;$#,##0'); 

另外一個示例是當您想要用前導零將數字零填充到固定長度時:

$spreadsheet->getActiveSheet()->getCell('A1')->setValue(19); $spreadsheet->getActiveSheet()->getStyle('A1')->getNumberFormat() ->setFormatCode('0000'); // will show as 0019 in Excel 

提示在Excel中編寫數字格式代碼的規則可能很是複雜。有時,您知道如何在Microsoft Office Excel中建立某種數字格式,但不知道底層數字格式代碼的外觀。你是怎麼找到它的?

PhpSpreadsheet附帶的閱讀器能夠救助。使用例如Xlsx閱讀器加載模板工做簿,以顯示數字格式代碼。示例如何讀取單元格A1的數字格式代碼:

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); $spreadsheet = $reader->load('template.xlsx'); var_dump($spreadsheet->getActiveSheet()->getStyle('A1')->getNumberFormat()->getFormatCode()); 

經過將template.xlsx重命名爲template.zip,解壓縮並在xl / styles.xml中查找包含數字格式代碼的相關XML代碼,高級用戶能夠更快地直接檢查數字格式代碼

對齊和換行

讓咱們將垂直對齊方式設置爲單元格A1:D4的頂部

$spreadsheet->getActiveSheet()->getStyle('A1:D4') ->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_TOP); 

這是實現自動換行的方法:

$spreadsheet->getActiveSheet()->getStyle('A1:D4') ->getAlignment()->setWrapText(true); 

設置工做簿的默認樣式

能夠設置工做簿的默認樣式。讓咱們將默認字體設置爲Arial大小8:

$spreadsheet->getDefaultStyle()->getFont()->setName('Arial'); $spreadsheet->getDefaultStyle()->getFont()->setSize(8); 

樣式單元格邊框

在PhpSpreadsheet中,很容易在矩形選擇上應用各類邊框。這是在單元格B2:G8周圍應用粗紅色邊框輪廓的方法。

$styleArray = [ 'borders' => [ 'outline' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK, 'color' => ['argb' => 'FFFF0000'], ], ], ]; $worksheet->getStyle('B2:G8')->applyFromArray($styleArray); 

在Microsoft Office Excel中,上述操做將與選擇單元格B2:G8,啓動樣式對話框,選擇粗紅色邊框並單擊「輪廓」邊框組件相對應。

請注意,邊框輪廓總體上應用於矩形選擇B2:G8,而不是單獨應用於每一個單元格。

您能夠經過僅使用5個基本邊框並一次在一個單元格上進行操做來實現任何邊框效果:

  • 剩下
  • 最佳
  • 底部
  • 對角線

像上面的示例同樣,其餘快捷方式邊框也很方便。這些是可用的快捷方式邊框:

  • 全部邊界
  • 大綱
  • 垂直
  • 水平的

下圖顯示了全部邊框快捷方式的概述:

08-styling-border-options.png

若是同時設置allBorders和vertical,那麼咱們將具備「重疊」邊框,而且其中一個組件必須贏得另外一個存在邊框重疊的組件。在PhpSpreadsheet中,從最弱的邊界到最強的邊界,列表以下:allBorder,輪廓/內部,垂直/水平,左側/右側/頂部/底部/對角線。

能夠利用該邊界層次結構以簡單的方式實現各類效果。

有效的樣式數組鍵 applyFromArray()

下表列出了\PhpOffice\PhpSpreadsheet\Style\Style::applyFromArray()的有效數組鍵 若是「映射到屬性」列將鍵映射到設置器,則爲該鍵提供的值將直接應用。若是「映射到屬性」列將鍵映射到getter,則爲該鍵提供的值將用做另外一個樣式數組。

\ PhpOffice \ PhpSpreadsheet \ Style \ Style

陣列鍵 映射到媒體資源
getFill()
字形 getFont()
邊界 getBorders()
對準 getAlignment()
numberFormat getNumberFormat()
保護 getProtection()

\ PhpOffice \ PhpSpreadsheet \ Style \ Fill

陣列鍵 映射到媒體資源
fillType setFillType()
迴轉 setRotation()
startColor getStartColor()
endColor getEndColor()
顏色 getStartColor()

\ PhpOffice \ PhpSpreadsheet \ Style \ Font

陣列鍵 映射到媒體資源
名稱 setName()
膽大 setBold()
斜體 setItalic()
強調 setUnderline()
刪除線 setStrikethrough()
顏色 getColor()
尺寸 setSize()
上標 setSuperscript()
下標 setSubscript()

\ PhpOffice \ PhpSpreadsheet \ Style \ Borders

陣列鍵 映射到媒體資源
全部邊界 getLeft(); getRight(); getTop(); getBottom()
剩下 getLeft()
getRight()
最佳 getTop()
底部 getBottom()
對角線 getDiagonal()
垂直 getVertical()
水平的 getHorizo​​ntal()
對角線方向 setDiagonalDirection()
大綱 setOutline()

\ PhpOffice \ PhpSpreadsheet \ Style \ Border

陣列鍵 映射到媒體資源
borderStyle setBorderStyle()
顏色 getColor()

\ PhpOffice \ PhpSpreadsheet \ Style \ Alignment

陣列鍵 映射到媒體資源
水平的 setHorizo​​ntal()
垂直 setVertical()
textRotation setTextRotation()
wrapText setWrapText()
縮小以適合 setShrinkToFit()
縮進 setIndent()

\ PhpOffice \ PhpSpreadsheet \ Style \ NumberFormat

陣列鍵 映射到媒體資源
formatCode setFormatCode()

\ PhpOffice \ PhpSpreadsheet \ Style \ Protection

陣列鍵 映射到媒體資源
已鎖定 setLocked()
setHidden()

有條件地格式化單元格

能夠基於特定規則有條件地格式化單元格。例如,若是一個單元格的值小於零,則能夠將其設置爲紅色,若是其值爲零或更大,則能夠將其設置爲綠色。

可使用如下代碼爲單元格設置條件樣式規則集:

$conditional1 = new \PhpOffice\PhpSpreadsheet\Style\Conditional(); $conditional1->setConditionType(\PhpOffice\PhpSpreadsheet\Style\Conditional::CONDITION_CELLIS); $conditional1->setOperatorType(\PhpOffice\PhpSpreadsheet\Style\Conditional::OPERATOR_LESSTHAN); $conditional1->addCondition('0'); $conditional1->getStyle()->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED); $conditional1->getStyle()->getFont()->setBold(true); $conditional2 = new \PhpOffice\PhpSpreadsheet\Style\Conditional(); $conditional2->setConditionType(\PhpOffice\PhpSpreadsheet\Style\Conditional::CONDITION_CELLIS); $conditional2->setOperatorType(\PhpOffice\PhpSpreadsheet\Style\Conditional::OPERATOR_GREATERTHANOREQUAL); $conditional2->addCondition('0'); $conditional2->getStyle()->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_GREEN); $conditional2->getStyle()->getFont()->setBold(true); $conditionalStyles = $spreadsheet->getActiveSheet()->getStyle('B2')->getConditionalStyles(); $conditionalStyles[] = $conditional1; $conditionalStyles[] = $conditional2; $spreadsheet->getActiveSheet()->getStyle('B2')->setConditionalStyles($conditionalStyles); 

若是要將規則集複製到其餘單元格,則能夠複製樣式對象:

$spreadsheet->getActiveSheet() ->duplicateStyle( $spreadsheet->getActiveSheet()->getStyle('B2'), 'B3:B7' ); 

在單元格中添加評論

要將註釋添加到單元格,請使用如下代碼。下面的示例向單元格E11添加註釋:

$spreadsheet->getActiveSheet() ->getComment('E11') ->setAuthor('Mark Baker'); $commentRichText = $spreadsheet->getActiveSheet() ->getComment('E11') ->getText()->createTextRun('PhpSpreadsheet:'); $commentRichText->getFont()->setBold(true); $spreadsheet->getActiveSheet() ->getComment('E11') ->getText()->createTextRun("\r\n"); $spreadsheet->getActiveSheet() ->getComment('E11') ->getText()->createTextRun('Total amount on the current invoice, excluding VAT.'); 

08-cell-comment.png

將自動過濾器應用於一系列單元格

要將自動過濾器應用於一系列單元格,請使用如下代碼:

$spreadsheet->getActiveSheet()->setAutoFilter('A1:C9'); 

確保您始終包括完整的過濾器範圍!Excel確實僅支持設置標題行,但這不是最佳實踐。

在電子表格上設置安全性

Excel提供3個級別的「保護」:

  • 文檔:容許您在完整的電子表格上設置密碼,僅當輸入該密碼時才能夠進行更改。
  • 工做表:提供其餘安全選項:您能夠禁止在特定工做表上插入行,禁止排序,...
  • 單元格:提供用於鎖定/解鎖單元格以及顯示/隱藏內部公式的選項。

有關設置文檔安全性的示例:

$spreadsheet->getSecurity()->setLockWindows(true); $spreadsheet->getSecurity()->setLockStructure(true); $spreadsheet->getSecurity()->setWorkbookPassword("PhpSpreadsheet"); 

有關設置工做表安全性的示例:

$spreadsheet->getActiveSheet() ->getProtection()->setPassword('PhpSpreadsheet'); $spreadsheet->getActiveSheet() ->getProtection()->setSheet(true); $spreadsheet->getActiveSheet() ->getProtection()->setSort(true); $spreadsheet->getActiveSheet() ->getProtection()->setInsertRows(true); $spreadsheet->getActiveSheet() ->getProtection()->setFormatCells(true); 

有關設置單元安全性的示例:

$spreadsheet->getActiveSheet()->getStyle('B1') ->getProtection() ->setLocked(\PhpOffice\PhpSpreadsheet\Style\Protection::PROTECTION_UNPROTECTED); 

若是須要任何工做表保護功能,請確保啓用工做表保護!可使用如下代碼完成此操做:

$spreadsheet->getActiveSheet()->getProtection()->setSheet(true); 

在單元上設置數據驗證

數據驗證是Xlsx的強大功能。它容許在能夠插入特定單元格的數據上指定輸入過濾器。該過濾器能夠是一個範圍(即值必須在0到10之間),列表(即值必須從列表中選取),...

如下代碼僅容許在單元格B3中輸入10到20之間的數字:

$validation = $spreadsheet->getActiveSheet()->getCell('B3') ->getDataValidation(); $validation->setType( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_WHOLE ); $validation->setErrorStyle( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_STOP ); $validation->setAllowBlank(true); $validation->setShowInputMessage(true); $validation->setShowErrorMessage(true); $validation->setErrorTitle('Input error'); $validation->setError('Number is not allowed!'); $validation->setPromptTitle('Allowed input'); $validation->setPrompt('Only numbers between 10 and 20 are allowed.'); $validation->setFormula1(10); $validation->setFormula2(20); 

如下代碼僅容許從數據列表中選取的項輸入到單元格B5中:

$validation = $spreadsheet->getActiveSheet()->getCell('B5') ->getDataValidation(); $validation->setType( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_LIST ); $validation->setErrorStyle( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_INFORMATION ); $validation->setAllowBlank(false); $validation->setShowInputMessage(true); $validation->setShowErrorMessage(true); $validation->setShowDropDown(true); $validation->setErrorTitle('Input error'); $validation->setError('Value is not in list.'); $validation->setPromptTitle('Pick from list'); $validation->setPrompt('Please pick a value from the drop-down list.'); $validation->setFormula1('"Item A,Item B,Item C"'); 

當使用上述數據驗證列表時,請確保將列表放在和之間""並用逗號(,分隔項目

重要的是要記住,參與Excel公式的任何字符串最多能夠包含255個字符(而不是字節)。這對字符串「 Item A,Item B,Item C」中能夠包含的項目設置了限制。所以,一般最好直接在某個單元格區域(例如A1:A3)中鍵入項目值,而改成使用 $validation->setFormula1('Sheet!$A$1:$A$3')另外一個好處是,項目值自己能夠包含逗號,字符自己。

若是您須要在多個單元格上進行數據驗證,則能夠克隆規則集:

$spreadsheet->getActiveSheet()->getCell('B8')->setDataValidation(clone $validation); 

設置列的寬度

可使用如下代碼設置列的寬度:

$spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(12); 

若是但願PhpSpreadsheet執行自動寬度計算,請使用如下代碼。PhpSpreadsheet將使用最寬列值的寬度來近似列。

$spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true); 

08-column-width.png

PhpSpreadsheet中的列寬度量與您在Microsoft Office Excel中可能習慣的度量徹底對應。在Excel中很難處理列寬,而且有幾種度量列寬的方法。

  1. 以字符單位表示的內部寬度(例如,8.43多是您在Excel中熟悉的寬度)
  2. 全寬(以像素爲單位)(例如64像素)
  3. 以字符爲單位的全寬(例如9.140625,值-1表示未設置的寬度)

PhpSpreadsheet始終以「 3.全角字符單位」運行,這其實是存儲在任何Excel文件中的惟一值,所以是最可靠的度量。不幸的是,Microsoft Office Excel不會爲您提供這種措施而是在打開文件時由應用程序計算度量1和2,而且在各類對話框和工具提示中顯示這些值。

字符寬度單位是0工做簿默認字體中(零)字形的寬度所以,只有在兩個不一樣工做簿中具備相同默認工做簿字體的狀況下,才能夠比較以字符爲單位測量的列寬。若是您有一些Excel文件而且須要知道度量3中的列寬,則可使用PhpSpreadsheet和回顯檢索到的值。

顯示/隱藏列

若要設置工做表的列可見性,可使用如下代碼。第一行明確顯示列C,第二行隱藏列D。

$spreadsheet->getActiveSheet()->getColumnDimension('C')->setVisible(true); $spreadsheet->getActiveSheet()->getColumnDimension('D')->setVisible(false); 

分組/概述一列

要對一列進行分組/概述,可使用如下代碼:

$spreadsheet->getActiveSheet()->getColumnDimension('E')->setOutlineLevel(1); 

您也能夠摺疊列。請注意,您還應該將列設置爲不可見,不然摺疊將在Excel 2007中不可見。

$spreadsheet->getActiveSheet()->getColumnDimension('E')->setCollapsed(true); $spreadsheet->getActiveSheet()->getColumnDimension('E')->setVisible(false); 

請參閱「分組/概述一行」部分以獲取有關摺疊的完整示例。

您能夠指示PhpSpreadsheet將摘要添加到右側(默認)或左側。如下代碼將摘要添加到左側:

$spreadsheet->getActiveSheet()->setShowSummaryRight(false); 

設置行的高度

可使用如下代碼設置行的高度:

$spreadsheet->getActiveSheet()->getRowDimension('10')->setRowHeight(100); 

Excel以點爲單位測量行高,其中1 pt是1/72英寸(或約0.35mm)。預設值爲12.75點;而且容許的值範圍在0到409 pts之間,其中0 pts是隱藏行。

顯示/隱藏行

若要設置工做表的行可見性,可使用如下代碼。下面的示例隱藏第10行。

$spreadsheet->getActiveSheet()->getRowDimension('10')->setVisible(false); 

請注意,若是您使用自動過濾器應用活動過濾器,則在保存文件時,它將覆蓋您在該自動過濾器範圍內手動隱藏或取消隱藏的全部行。

分組/概述行

要對行進行分組/概述,可使用如下代碼:

$spreadsheet->getActiveSheet()->getRowDimension('5')->setOutlineLevel(1); 

您也能夠摺疊該行。請注意,您還應該將行設置爲不可見,不然摺疊將在Excel 2007中不可見。

$spreadsheet->getActiveSheet()->getRowDimension('5')->setCollapsed(true); $spreadsheet->getActiveSheet()->getRowDimension('5')->setVisible(false); 

這是摺疊第50至80行的示例:

for ($i = 51; $i <= 80; $i++) { $spreadsheet->getActiveSheet()->setCellValue('A' . $i, "FName $i"); $spreadsheet->getActiveSheet()->setCellValue('B' . $i, "LName $i"); $spreadsheet->getActiveSheet()->setCellValue('C' . $i, "PhoneNo $i"); $spreadsheet->getActiveSheet()->setCellValue('D' . $i, "FaxNo $i"); $spreadsheet->getActiveSheet()->setCellValue('E' . $i, true); $spreadsheet->getActiveSheet()->getRowDimension($i)->setOutlineLevel(1); $spreadsheet->getActiveSheet()->getRowDimension($i)->setVisible(false); } $spreadsheet->getActiveSheet()->getRowDimension(81)->setCollapsed(true); 

您能夠指示PhpSpreadsheet在可摺疊行下方(默認)或上方添加摘要。如下代碼添加了以上摘要:

$spreadsheet->getActiveSheet()->setShowSummaryBelow(false); 

合併/取消合併單元格

若是要在工做表中顯示大量數據,則能夠將兩個或多個單元合併在一塊兒,成爲一個單元。可使用如下代碼完成此操做:

$spreadsheet->getActiveSheet()->mergeCells('A18:E22'); 

可使用unmergeCells方法刪除合併:

$spreadsheet->getActiveSheet()->unmergeCells('A18:E22'); 

插入行/列

您能夠在特定位置插入/刪除行/列。如下代碼在第7行以前插入了2行:

$spreadsheet->getActiveSheet()->insertNewRowBefore(7, 2); 

將工程圖添加到工做表

工程圖始終表示爲單獨的對象,能夠將其添加到工做表中。所以,您必須首先實例化new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing,而後爲其屬性分配一個有意義的值:

$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing(); $drawing->setName('Logo'); $drawing->setDescription('Logo'); $drawing->setPath('./images/officelogo.jpg'); $drawing->setHeight(36); 

要將上述圖形添加到工做表中,請使用如下代碼片斷。PhpSpreadsheet在圖形和工做表之間建立連接:

$drawing->setWorksheet($spreadsheet->getActiveSheet()); 

您能夠在工程圖上設置許多屬性,如下是一些示例:

$drawing->setName('Paid'); $drawing->setDescription('Paid'); $drawing->setPath('./images/paid.png'); $drawing->setCoordinates('B15'); $drawing->setOffsetX(110); $drawing->setRotation(25); $drawing->getShadow()->setVisible(true); $drawing->getShadow()->setDirection(45); 

您也能夠添加使用GD功能建立的圖像,而無需先將它們做爲內存中圖形保存到磁盤。

// Use GD to create an in-memory image $gdImage = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream'); $textColor = imagecolorallocate($gdImage, 255, 255, 255); imagestring($gdImage, 1, 5, 5, 'Created with PhpSpreadsheet', $textColor); // Add the In-Memory image to a worksheet $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing(); $drawing->setName('In-Memory image 1'); $drawing->setDescription('In-Memory image 1'); $drawing->setCoordinates('A1'); $drawing->setImageResource($gdImage); $drawing->setRenderingFunction( \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::RENDERING_JPEG ); $drawing->setMimeType(\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_DEFAULT); $drawing->setHeight(36); $drawing->setWorksheet($spreadsheet->getActiveSheet()); 

從工做表中讀取圖像

一個常見的問題是如何從已加載的工做簿中檢索圖像,並將其做爲單獨的圖像文件保存到磁盤。

如下代碼從當前活動的工做表中提取圖像,並將每一個圖像寫爲一個單獨的文件。

$i = 0; foreach ($spreadsheet->getActiveSheet()->getDrawingCollection() as $drawing) { if ($drawing instanceof \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing) { ob_start(); call_user_func( $drawing->getRenderingFunction(), $drawing->getImageResource() ); $imageContents = ob_get_contents(); ob_end_clean(); switch ($drawing->getMimeType()) { case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_PNG : $extension = 'png'; break; case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_GIF: $extension = 'gif'; break; case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_JPEG : $extension = 'jpg'; break; } } else { $zipReader = fopen($drawing->getPath(),'r'); $imageContents = ''; while (!feof($zipReader)) { $imageContents .= fread($zipReader,1024); } fclose($zipReader); $extension = $drawing->getExtension(); } $myFileName = '00_Image_'.++$i.'.'.$extension; file_put_contents($myFileName,$imageContents); } 

向單元格添加富文本

可使用\PhpOffice\PhpSpreadsheet\RichText\RichText實例將富文本添加到單元格 這是一個示例,它建立如下富文本字符串:

除非發票上另有說明,不然該發票應在月底後的三十天內支付

$richText = new \PhpOffice\PhpSpreadsheet\RichText\RichText(); $richText->createText('This invoice is '); $payable = $richText->createTextRun('payable within thirty days after the end of the month'); $payable->getFont()->setBold(true); $payable->getFont()->setItalic(true); $payable->getFont()->setColor( new \PhpOffice\PhpSpreadsheet\Style\Color( \PhpOffice\PhpSpreadsheet\Style\Color::COLOR_DARKGREEN ) ); $richText->createText(', unless specified otherwise on the invoice.'); $spreadsheet->getActiveSheet()->getCell('A18')->setValue($richText); 

定義一個命名範圍

PhpSpreadsheet支持命名範圍的定義。可使用如下代碼定義它們:

// Add some data $spreadsheet->setActiveSheetIndex(0); $spreadsheet->getActiveSheet()->setCellValue('A1', 'Firstname:'); $spreadsheet->getActiveSheet()->setCellValue('A2', 'Lastname:'); $spreadsheet->getActiveSheet()->setCellValue('B1', 'Maarten'); $spreadsheet->getActiveSheet()->setCellValue('B2', 'Balliauw'); // Define named ranges $spreadsheet->addNamedRange( new \PhpOffice\PhpSpreadsheet\NamedRange('PersonFN', $spreadsheet->getActiveSheet(), 'B1') ); $spreadsheet->addNamedRange( new \PhpOffice\PhpSpreadsheet\NamedRange('PersonLN', $spreadsheet->getActiveSheet(), 'B2') ); 

可選地,能夠傳遞第四個參數來定義本地命名範圍(即僅在當前工做表上可用)。默認狀況下,命名範圍是全局的。

將輸出重定向到客戶端的Web瀏覽器

有時,人們確實但願將文件輸出到客戶的瀏覽器,尤爲是在動態建立電子表格時。有一些簡單的步驟能夠執行如下操做:

  1. 建立您的PhpSpreadsheet電子表格
  2. 輸出您要輸出的文檔類型的HTTP標頭
  3. 使用\PhpOffice\PhpSpreadsheet\Writer\*您選擇的,而後保存到'php://output'

\PhpOffice\PhpSpreadsheet\Writer\Xlsx寫入時使用臨時存儲php://output默認狀況下,臨時文件存儲在腳本的工做目錄中。若是沒有訪問權限,它將退回到操做系統的臨時文件位置。

未經受權觀看可能不安全!根據您操做系統的配置,任何人均可以使用同一臨時存儲文件夾讀取臨時存儲。當須要對文檔保密時,建議不要使用php://output

HTTP標頭

將Excel 2007文件重定向到客戶端瀏覽器的腳本示例:

/* Here there will be some code where you create $spreadsheet */ // redirect output to client browser header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="myfile.xlsx"'); header('Cache-Control: max-age=0'); $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save('php://output'); 

將Xls文件重定向到客戶端瀏覽器的腳本示例:

/* Here there will be some code where you create $spreadsheet */ // redirect output to client browser header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="myfile.xls"'); header('Cache-Control: max-age=0'); $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls'); $writer->save('php://output'); 

警告:

確保不包括任何echo語句或輸出除Excel文件之外的任何其餘內容。在開始<?php標記以前不該有空格,而在結束?> 標記以後不該有任何換行符(也能夠將其省略以免出現問題)。確保您保存的腳本沒有BOM(字節順序標記),由於這算做回顯輸出。相同的內容適用於全部包含的文件。不遵循上述準則可能會致使損壞的Excel文件到達客戶端瀏覽器,和/或PHP沒法設置標頭(致使警告消息)。

設置默認列寬

可使用如下代碼設置默認列寬:

$spreadsheet->getActiveSheet()->getDefaultColumnDimension()->setWidth(12); 

設置默認行高

可使用如下代碼設置默認行高:

$spreadsheet->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15); 

將GD工程圖添加到工做表

在某些狀況下,您可能想使用GD生成內存中映像並將其添加到中,Spreadsheet而無需先將此文件保存到臨時位置。

這是一個在內存中生成圖像並將其添加到活動工做表的示例:

// Generate an image $gdImage = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream'); $textColor = imagecolorallocate($gdImage, 255, 255, 255); imagestring($gdImage, 1, 5, 5, 'Created with PhpSpreadsheet', $textColor); // Add a drawing to the worksheet $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing(); $drawing->setName('Sample image'); $drawing->setDescription('Sample image'); $drawing->setImageResource($gdImage); $drawing->setRenderingFunction(\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::RENDERING_JPEG); $drawing->setMimeType(\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_DEFAULT); $drawing->setHeight(36); $drawing->setWorksheet($spreadsheet->getActiveSheet()); 

設置工做表縮放級別

要設置工做表的縮放級別,可使用如下代碼:

$spreadsheet->getActiveSheet()->getSheetView()->setZoomScale(75); 

請注意,縮放級別應在10-400的範圍內。

工做表標籤顏色

有時您想爲工做表標籤設置顏色。例如,您能夠有一個紅色工做表標籤:

$worksheet->getTabColor()->setRGB('FF0000'); 

在工做簿中建立工做表

若是您須要在工做簿中建立更多工做表,請按照如下步驟操做:

$worksheet1 = $spreadsheet->createSheet(); $worksheet1->setTitle('Another sheet'); 

能夠將其createSheet()視爲Excel中的「插入工做表」按鈕。當您單擊該按鈕時,新的工做表將添加到工做簿中現有的工做表集合中。

隱藏的工做表(Sheet狀態)

使用如下代碼將工做表設置爲隱藏

$spreadsheet->getActiveSheet() ->setSheetState(\PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::SHEETSTATE_HIDDEN); 

有時,您甚至可能但願工做表「很是隱藏」可用的工做表狀態爲:

  • \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::SHEETSTATE_VISIBLE
  • \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::SHEETSTATE_HIDDEN
  • \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::SHEETSTATE_VERYHIDDEN

在Excel中,只能以編程方式(例如,使用Visual Basic Macro)設置工做表狀態「很是隱藏」。不能經過用戶界面使此類工做表可見。

從右到左的工做表

能夠分別設置工做表,不管列A應從左側仍是右側開始。保留默認值。這是從右到左設置列的方法。

// right-to-left worksheet $spreadsheet->getActiveSheet()->setRightToLeft(true);
相關文章
相關標籤/搜索