下面的程式碼是我自己練習時使用的範例,基本上只要把 PHPExcel 正確引用進來,應該可以執行無誤,直接產生一個 Excel 檔。
<?php require_once 'Classes/PHPExcel.php'; // 新增Excel物件 $objPHPExcel = new PHPExcel(); // 設定屬性 $objPHPExcel->getProperties()->setCreator("PHP") ->setLastModifiedBy("PHP") ->setTitle("Title") ->setSubject("Subject") ->setDescription("Description") ->setKeywords("Keywords") ->setCategory("Category"); //設定操作中的工作表 $objPHPExcel->setActiveSheetIndex(0); $sheet = $objPHPExcel->getActiveSheet(); //將工作表命名 $sheet->setTitle('第一張表'); //合併儲存格 $sheet->mergeCells('A1:D2'); //儲存格內容 $sheet->setCellValue('A1','PHPEXCEL TEST'); //合併後的儲存格,設定時指定左上角那個。 $sheet->setCellValue('A3','test'); $sheet->setCellValue('B3','test'); $sheet->setCellValue('C3','test'); $sheet->setCellValue('D3','test'); $sheet->setCellValue('A4','test'); $sheet->setCellValue('B4','test'); $sheet->setCellValue('C4','test'); $sheet->setCellValue('D4','test'); //設定背景顏色單色 $sheet->getStyle('A3:D3')->applyFromArray( array('fill' => array( 'type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('argb' => 'D1EEEE') ), ) ); //設定漸層背景顏色雙色(灰/白) 經測試,Excel2007才有漸層 $sheet->getStyle('A1:D2')->applyFromArray( array( 'font' => array('bold' => true, 'size' => '24'), 'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER), 'borders' => array('top' => array('style' => PHPExcel_Style_Border::BORDER_THIN)), 'fill' => array('type' => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR, 'rotation' => 90, 'startcolor' => array('rgb' => 'DCDCDC'), 'endcolor' => array('rgb' => 'FFFFFF')) )); //框線 方法一:使用 setBorderStyle() 函數 $sheet->getStyle('A5')->getBorders()->getTop() ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $sheet->getStyle('B5')->getBorders()->getBottom() ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $sheet->getStyle('C5')->getBorders()->getleft() ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $sheet->getStyle('D5')->getBorders()->getright() ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $sheet->getStyle('A7:C10')->getBorders()->getAllborders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); //框線 方法二:使用applyFromArray()函數 $styleArray = array( 'borders' => array( 'allborders' => array( 'style' => PHPExcel_Style_Border::BORDER_THIN, 'color' => array('argb' => '000000'), ), ), ); $sheet->getStyle('A12:C15')->applyFromArray($styleArray); //框線 方法三:使用物件 + applyFromArray()函數 $style_obj = new PHPExcel_Style(); $style_array = array( 'borders' => array('allborders'=> array('style' => PHPExcel_Style_Border::BORDER_THIN)), 'alignment' => array('wrap'=> true, 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, 'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER ), 'font' => array('size' => '8') ); $style_obj->applyFromArray($style_array); $sheet->setSharedStyle($style_obj, 'E7:G10'); //斜線 方法一 $styleArray = array('borders' => array('diagonal' => array('style' => PHPExcel_Style_Border::BORDER_THICK, 'color' => array('argb' => 'FFFF0000'), ), 'diagonaldirection' => PHPExcel_Style_Borders::DIAGONAL_UP //'diagonaldirection' => PHPExcel_Style_Borders::DIAGONAL_DOWN //'diagonaldirection' => PHPExcel_Style_Borders::DIAGONAL_BOTH ), ); $sheet->getStyle("E1")->applyFromArray($styleArray); //斜線 方法二 $sheet->getStyle('F1')->getBorders()->getDiagonal()->applyFromArray(array( 'style' => PHPExcel_Style_Border::BORDER_THIN, 'color' => array('argb' => 'FFFF0000') ) ); $sheet->getStyle('F1')->getBorders()->setDiagonalDirection(PHPExcel_Style_Borders::DIAGONAL_DOWN); /* 註: PHPExcel_Style_Borders::DIAGONAL_UP PHPExcel_Style_Borders::DIAGONAL_DOWN PHPExcel_Style_Borders::DIAGONAL_BOTH */ //設定一個範圍後套用相同格式 $sheet->mergeCells('E12:F13'); $sheet->setCellValue('E12',"Hello \n World"); $style_obj = new PHPExcel_Style(); $style_array = array( 'borders' => array('allborders'=> array('style' => PHPExcel_Style_Border::BORDER_THIN)), 'alignment' => array('wrap'=> true, 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, 'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER ), 'font' => array('size' => '8') ); $style_obj->applyFromArray($style_array); $sheet->setSharedStyle($style_obj, "E12:G14"); //設定字型(大小、粗細、顏色) 也可參照上面的方法,用陣列的方式設定。 $sheet->getStyle('B4')->getFont()->setName('Candara'); $sheet->getStyle('B4')->getFont()->setSize(16); $sheet->getStyle('B4')->getFont()->setBold(true); $sheet->getStyle('B4')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $sheet->getStyle('B4')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); //藍色 $sheet->getStyle('C4')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED); //紅色 $sheet->getStyle('C4')->getFont()->getColor()->setARGB('FF0000'); //紅色 $sheet->setCellValue('G2', '2008-12-31'); $sheet->getStyle('G2')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH); /* 這裡有列出可用英文單字表示的顏色,並不多。 http://www.cmsws.com/examples/applications/phpexcel/Documentation/API/PHPExcel_Style/PHPExcel_Style_Color.html COLOR_BLACK COLOR_BLUE COLOR_DARKBLUE COLOR_DARKGREEN COLOR_DARKRED COLOR_DARKYELLOW COLOR_GREEN COLOR_RED COLOR_WHITE COLOR_YELLOW */ //使用函數 $sheet->setCellValue('A5','3'); $sheet->setCellValue('B5','4'); $sheet->setCellValue('C5', '=SUM(A5:B5)'); //設定A3內容為00123,並指定為文字型態。這樣在顯示的時候不會自動把0去掉。 $sheet->getCell("A4")->setValueExplicit('00123', PHPExcel_Cell_DataType::TYPE_STRING); //設定成數字,並且有千分位逗號 $sheet->getCell($celll_name)->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_NUMERIC); $sheet->getStyle("$celll_name")->getNumberFormat()->setFormatCode('#,##0.00'); // excel格式設定裡的#:代表數字,多餘的0會去掉。 excel格式設定裡的0:基本上跟#一樣,但是多餘的0會保留。 //分離儲存格 //$objActSheet->unmergeCells('B1:C22'); //設定欄寬 $sheet->getColumnDimension('A')->setWidth(20); //設定欄寬(自動欄寬) //$sheet->getColumnDimension("A")->setAutoSize(true); //設定高度(列高) (有些人可能會說行高) $sheet->getRowDimension('1')->setRowHeight(150); //下底線 $sheet->getStyle("D3")->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); //旋轉文字 $sheet->getStyle('A4')->getAlignment()->setTextRotation(-90); //對齊 //注意是 setVertiacl 還是 setHorizontal $sheet->getStyle('B4')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $sheet->getStyle('C4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); /* VERTICAL_CENTER 垂直置中 VERTICAL_TOP HORIZONTAL_CENTER HORIZONTAL_RIGHT HORIZONTAL_LEFT HORIZONTAL_JUSTIFY */ //設定備註 add comment ----------------------------------------------- $sheet->getComment('A6')->setAuthor('PHPExcel'); $sheet->getComment('A6')->getText()->createTextRun('comment1 comment1 comment1 '); $sheet->getComment('A6')->setWidth('200pt'); $sheet->getComment('A6')->setHeight('100pt'); $sheet->getComment('A6')->setMarginLeft('150pt'); $sheet->getComment('A6')->getFillColor()->setRGB('dea66e'); //背景顏色 $objCommentRichText = $sheet->getComment('A6')->getText()->createTextRun('comment2 comment2 comment2 '); $objCommentRichText->getFont()->setBold(true); //文字加粗 $objCommentRichText->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED); //文字顏色 // 設定格式:使用物件的方式 $style_obj = new PHPExcel_Style(); $styleArray = array('borders' => array('left'=> array('style' => PHPExcel_Style_Border::BORDER_THICK), 'top'=> array('style' => PHPExcel_Style_Border::BORDER_THIN), 'right'=> array('style' => PHPExcel_Style_Border::BORDER_THIN), 'bottom'=> array('style' => PHPExcel_Style_Border::BORDER_THIN) )); $style_obj->applyFromArray($styleArray); $letter = PHPExcel_Cell::stringFromColumnIndex(0); //A $cellname1 = $letter.'1'; // A1 $cellname2 = $letter.'7'; // A7 $cell_range = "$cellname1:$cellname2"; $sheet->setSharedStyle($style_obj, "$cell_range"); // 設定格式:使用陣列 $styleArray = array( 'borders' => array( 'allborders' => array( 'style' => PHPExcel_Style_Border::BORDER_THIN, 'color' => array('argb' => '000000') ), ), 'font' => array('bold' => true, 'size' => '12', 'color' => array('argb' => 'FF0000') ) ); $sheet->getStyle('A12:C15')->applyFromArray($styleArray); // 註解 $comment = "This is comment"; $sheet->getComment("F1")->getFillColor()->setRGB('FFFAD9'); //背景顏色 $sheet->getComment("F1")->setWidth('320pt'); $objCommentRichText = $sheet->getComment("F1")->getText()->createTextRun("$comment"); $objCommentRichText->getFont()->getColor()->setRGB('008080'); //文字顏色 $objCommentRichText->getFont()->setBold(true); //文字加粗 //--------------------------------------------------------------------------------------------- // 設定其它工作表 $objPHPExcel->createSheet(); $objPHPExcel->setActiveSheetIndex(1); $sheet->setTitle('第二張表'); $sheet->setCellValue('A3',"test1"); $sheet->setCellValue('B3','test2'); $objPHPExcel->setActiveSheetIndex(0); //若要在 2003 跟 2007 之間切換,選然下面兩段其中一段即可。 //Excel 2007 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="01simple.xlsx"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); /* //Excel 2003 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="01simple.xls"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //Excel 2003 = Excel 5 */ //============================================================================================= $objWriter->save('php://output'); exit; ?>
要讀取 Excel 檔,請參考 PHPExcel - 讀取Excel檔
PHPExcel官網
列印版面設定:Setting Your Worksheet Printing Layout Options in PHPExcel
廣告連結
新北搬家、台北市搬家、中和搬家、板橋搬家雙喜搬家、新北搬家、台北市搬家、中和搬家、板橋搬家
沒有留言:
張貼留言