PHPExcel:用於Excel等文檔產生的PHP開源類庫

來源:互聯網
上載者:User

PHPExcel是一個十分強大的文檔產生PHP開源類庫,它不僅支援產生Excel(.xls)、Excel2007(.xlsx)文檔,同時也支援PDF、HTML、CSV文檔的產生。此外,PHPExcel還支援以現有的Excel文檔為模板填充資料產生新的以上文檔。並且,其本身的API文檔和樣本demo相當完整,非常有助於開發人員使用。

 

PHPExcel的官方網站如下:

http://phpexcel.codeplex.com/

 

當前的版本是1.7.6,下載解壓後的PHPExcel的目錄結構如下所示:

其中:

Classes目錄下是PHPExcel的原始碼檔案:PHPExcel.php檔案是類庫的介面,外部的PHP代碼通過它來實現對PHPExcel的調用;PHPExcel目錄下是各種不同文檔(如Excel、Excel2007、PDF等)的讀取和產生的具體作業碼,它們由Classes目錄下的PHPExcel.php檔案通過原廠模式統一進行調用。

Documentation目錄下是PHPExcel的官方協助文檔,尤其是API目錄下網頁檔案全部是PHPExcel的API協助文檔,而其它的則是對這個開源項目的介紹。

Tests目錄下是PHPExcel的將近40個樣本小程式,可以與Classes目錄一同放到Apache+PHP環境下進行測試與學習。

 

下面是PHPExcel中一些常用的程式碼片段:

<?php// 匯入PHPExcel類庫require_once("Classes/PHPExcel.php");// 通常PHPExcel對象有兩種執行個體化的方式// 1. 通過new關鍵字建立空白文檔$phpexcel = new PHPExcel();// 2. 通過讀取已有的模板建立$phpexcel = PHPExcel_IOFactory::createReader("Excel5")->load("template.xls");/**  * 執行個體化之後的PHPExcel對象類似於一個暫存於記憶體中文檔檔案,  * 可以對它進行操作以達到修改文檔資料的目的 */// 設定文件屬性$phpexcel->getProperties()->setCreator("Liu Jian") // 文檔作者  ->setLastModifiedBy("Liu Jian") // 最後一次修改者  ->setTitle("Office 2003 XLS Test Document") // 標題  ->setSubject("Office 2003 XLS Test Document") // 主題  ->setDescription("Test document for Office 2003 XLS, generated using PHPExcel.") // 備忘  ->setKeywords("office 2003 openxml php") // 關鍵字  ->setCategory("Test result file"); // 類別  // 預設狀態下,新建立的空白文檔(通過new)只有一個工作表(sheet),且它的編號(index)為0// 可以通過如下的方式添加新的工作表$phpexcel->createSheet(1);// 擷取已有編號的工作表$sheet = $phpexcel->getSheet(1);// 設定當前啟用的工作表編號$phpexcel->setActiveSheetIndex(1);// 擷取當前啟用的工作表$sheet = $phpexcel->getActiveSheet();// 得到工作表之後就可以操作它的儲存格以修改資料了// 修改工作表的名稱$sheet->setTitle("Test");// 設定儲存格A5的值$sheet->setCellValue("A5", date('Y-m-d h:i:s'));// 設定第3行第5列(E3)的值$sheet->setCellValueByColumnAndRow(4, 3, date('Y-m-d h:i:s'));// 擷取儲存格A5的值$sheet->getCell("A5")->getValue();// 合併儲存格$sheet->mergeCells("C3:G6");// 拆分合并的儲存格$sheet->unmergeCells("C3:G6");// 設定第3行的屬性$sheet->getRowDimension(3)->setRowHeight(100) // 行高  ->setVisible(true) // 是否可見,預設為true   ->setRowIndex(6) // 變更行號為6  ->setOutlineLevel(5); // 優先順序別,預設為0,參數必須是0到7// 設定第F列的屬性// getColumnDimension("F")可以用getColumnDimensionByColumn(5)代替$sheet->getColumnDimension("F")->setWidth(200) // 列寬   ->setColumnIndex("I") // 變更列號為I   ->setVisible(false) // 是否可見   ->setAutoSize(true); // 自動適應列寬// 在第3行前面插入1行,該行將變成新的第3行,其它的依次下移1行$sheet->insertNewRowBefore(3, 1);// 在第C行前面插入1列,該列將變成新的第C列,其它的依次右移1列$sheet->insertNewColumnBefore("C", 1); // 方法一$sheet->insertNewColumnBeforeByIndex(2, 1); // 方法二,第C列又是第2列// 擷取儲存格D3的樣式對象$style = $sheet->getStyle("D3"); // 等價於getStyleByColumnAndRow(3, 3)// 設定該儲存格的字型屬性$style->getFont()->setBold(true) // 是否粗體 ->setSize(16) // 字型大小 ->setName("Gungsuh") // 字型名,只適用於外文字型 ->setItalic(true) // 是否斜體 ->setStrikethrough(true) // 是否有刪除線 ->setUnderline(PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING) // 底線類型 ->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); // 字型顏色 // 設定該儲存格的背景填充屬性$style->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID) // 填充模式 ->getStartColor()->setARGB(PHPExcel_Style_Color::COLOR_YELLOW); // 背景顏色// 設定該儲存格中數位格式$style->getNumberFormat()->setFormatCode("0.00");// 設定該儲存格中文本對齊$style->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER) // 水平方向  ->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); // 垂直方向$sheet->setCellValue("D3", "12.3456");// 在本地儲存文檔PHPExcel_IOFactory::createWriter($phpexcel, 'Excel5')->save("output.xls");// 輸出文檔到頁面header('Content-Type: application/vnd.ms-excel');header('Content-Disposition: attachment;filename="test.xls"');header('Cache-Control: max-age=0');PHPExcel_IOFactory::createWriter($phpexcel, 'Excel5')->save('php://output');?>

需要注意的是:

1. PHPExcel本身具有在儲存格中插入圖片以及設定儲存格邊框的相關函數,但是個人感覺動態添加圖片、設定邊框遠沒有使用靜態excel模版來產生文檔更好用。實在需要的情況下可以參見最後的參考資料。

2. 添加新的行或列時,新的行或列的樣式(style)會自動與新行/列的前一行/列保持一致。

3. 設定儲存格填補值顏色時,必須先設定填充模式,否則會失效。

4. 通過PHPExcel_IOFactory的靜態方法createReader或createWriter,必須傳入文檔格式所對應的參數字串,其中:

  • Excel5對應Excel 2003(.xls)
  • Excel2007對應Excel 2007(.xlsx)
  • PDF對應PDF(.pdf)
  • CSV對應CSV(.csv)

輸出文檔時,檔案的副檔名必須與該參數字串相契合。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.