제목 | PHPExcel를 CI속으로~ | ||
---|---|---|---|
글쓴이 | 터프키드 | 작성시각 | 2010/03/30 11:56:57 |
|
|||
웅파님이 올려주신 팁을 한글화 한 정도 입니다; ( 웅파님이 올려주신 팁 http://codeigniter-kr.org/tip/view/378/page/1/q/excel ) 1. PHPExcel 을 다운로드 받으세요 http://phpexcel.codeplex.com/releases/view/10719 저는 1.7.2 버전을 사용하였습니다. 2. /system/application 아래 excelWriter 라는 이름으로 디렉토리를 만듭니다.. 이름은 아무거나 상관없어요 웅파님 팁에는 my_classes로 되어있는데... 전 확장 모듈별로 디렉토리를 따로 만들려고.. ( /system/application/pear, /system/application/excelWriter ...) 3. application/config/config.php 파일을 열어 $config['enable_hooks'] = FALSE; 를 찾아 TRUE 로 변경해주세요 4. application/config/hooks.php 파일을 열어 아래와 같이 추가합니다 $hook['pre_controller'][] = array( 'class' => 'ExcelWriter', 'function' => 'index', 'filename' => 'ExcelWriter.php', 'filepath' => 'hooks' );5. /system/application/hooks/ 디렉토리에 ExcelWriter.php 파일을 생성하고 아래와 같이 입력해주세요 <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class ExcelWriter { /** * includes the directory application\my_classes\Classes in your includes directory * */ function index() { //includes the directory application\my_classes\Classes\ ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.BASEPATH.'application/excelWriter/Classes/'); ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.BASEPATH.'application/excelWriter/Classes/PHPExcel/'); ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.BASEPATH.'application/excelWriter/Classes/PHPExcel/Writer'); } } ?>로더를 생성하고 클래스를 로드해서 쓰려고 하다보니 패스가 세개가 됐네요;; 6. 마지막으로 /system/application/libraries/ 에 ExcelWriterLoader.php 를 생성하고 아래와 같이 입력해주세요. <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class ExcelWriterLoader { function load($class, $options = null){ require_once($class.'.php'); $classname = $class; if(is_null($options)){ return new $classname(); }else{ return new $classname($options); } } } ?> 8. 마지막이 아니었군요 ㅎㅎ; 로더가 클래스를 잘~ 읽어올 수 있게 파일이름 두개만 수정합니다~ /system/application/excelWriter/Classes/PHPExcel/Writer 에 들어가보시면 Excel5.php, Excel2007.php 파일 두개가 있어요 둘다 파일 안의 클래스명과 동일하게 파일명을 바꿔줍니다. ( Excel5.php => PHPExcel_Writer_Excel5.php , Excel2007.php => PHPExcel_Writer_Excel2007 ) 나중에 html이나 csv 등을 사용할때도 로더로 읽으시려면 동일하게 바꿔주셔야 합니다 9. 실제로 사용한 코드 입니다. // Create new PHPExcel object echo date('H:i:s') . " Create new PHPExcel object\n"; $this->load->library("excelwriterloader"); $exObj = $this->excelwriterloader->load("PHPExcel"); // Set properties echo date('H:i:s') . " Set properties\n"; $exObj->getProperties()->setCreator("BazZ"); $exObj->getProperties()->setLastModifiedBy("BazZ"); $exObj->getProperties()->setTitle("TestExcel"); $exObj->getProperties()->setSubject(""); // Set row height $exObj->getActiveSheet()->getRowDimension(1)->setRowHeight(50); $exObj->getActiveSheet()->getRowDimension(2)->setRowHeight(25); // Set column width $exObj->getActiveSheet()->getColumnDimension('A')->setWidth(5); $exObj->getActiveSheet()->getColumnDimension('B')->setWidth(30); $exObj->getActiveSheet()->getColumnDimension('C')->setWidth(30); $exObj->getActiveSheet()->getColumnDimension('D')->setWidth(40); $exObj->getActiveSheet()->getColumnDimension('E')->setWidth(15); $exObj->getActiveSheet()->getColumnDimension('F')->setWidth(15); $exObj->getActiveSheet()->getColumnDimension('G')->setWidth(30); $exObj->getActiveSheet()->getColumnDimension('H')->setWidth(10); $exObj->getActiveSheet()->getColumnDimension('I')->setWidth(20); $exObj->getActiveSheet()->getColumnDimension('J')->setWidth(20); $exObj->getActiveSheet()->getColumnDimension('K')->setWidth(20); $exObj->getActiveSheet()->getColumnDimension('L')->setWidth(20); $exObj->getActiveSheet()->getColumnDimension('M')->setWidth(20); $exObj->getActiveSheet()->getColumnDimension('N')->setWidth(20); //Merge cells (warning: the row index is 0-based) $exObj->getActiveSheet()->mergeCellsByColumnAndRow(0,1,13,1); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(0,2,13,2); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(0,3,0,5); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(1,3,1,5); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(2,3,3,3); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(2,4,2,5); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(3,4,3,5); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(4,3,4,5); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(5,3,5,5); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(6,3,6,5); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(7,3,9,3); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(7,4,7,5); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(8,4,9,4); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(10,3,10,5); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(11,3,11,5); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(12,3,12,5); $exObj->getActiveSheet()->mergeCellsByColumnAndRow(13,3,13,5); //Modify cell's style $exObj->getActiveSheet()->getStyle('A1')->applyFromArray( array( 'font' => array( 'name' => 'Times New Roman', 'bold' => true, 'italic' => false, 'size' => 20 ), 'alignment' => array( 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, 'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER, 'wrap' => true ) ) ); $exObj->getActiveSheet()->getStyle('A2')->applyFromArray( array( 'font' => array( 'name' => 'Times New Roman', 'bold' => true, 'italic' => false, 'size' => 14 ), 'alignment' => array( 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_LEFT, 'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER, 'wrap' => true ) ) ); $exObj->getActiveSheet()->duplicateStyleArray( array( 'font' => array( 'name' => 'Times New Roman', 'bold' => true, 'italic' => false, 'size' => 12 ), 'borders' => array( 'top' => array('style' => PHPExcel_Style_Border::BORDER_DOUBLE), 'bottom' => array('style' => PHPExcel_Style_Border::BORDER_DOUBLE), 'left' => array('style' => PHPExcel_Style_Border::BORDER_DOUBLE), 'right' => array('style' => PHPExcel_Style_Border::BORDER_DOUBLE) ), 'alignment' => array( 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, 'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER, 'wrap' => true ) ), 'A3:N5' ); // Add some data echo date('H:i:s') . " Add some data\n"; $exObj->setActiveSheetIndex(0); $exObj->getActiveSheet()->SetCellValue('A1', 'Try PHPExcel with CodeIgniter'); $exObj->getActiveSheet()->SetCellValue('A2',"Subtitle here"); $exObj->getActiveSheet()->SetCellValue('A3',"No."); $exObj->getActiveSheet()->SetCellValue('B3',"Name"); $exObj->getActiveSheet()->SetCellValue('C3',"Number"); $exObj->getActiveSheet()->SetCellValue('C4',"Code"); $exObj->getActiveSheet()->SetCellValue('D4',"Register"); $exObj->getActiveSheet()->SetCellValue('E3',"Space (M2)"); $exObj->getActiveSheet()->SetCellValue('F3',"Year"); $exObj->getActiveSheet()->SetCellValue('G3',"Location"); // Rename sheet echo date('H:i:s') . " Rename sheet\n"; $exObj->getActiveSheet()->setTitle('Try PHPExcel with CodeIgniter'); // Save Excel 2003 file echo date('H:i:s') . " Write to Excel2003 format\n"; $objWriter = $this->excelwriterloader->load("PHPExcel_Writer_Excel5", $exObj); //$objWriter = new PHPExcel_Writer_Excel5($exObj); $file_name = "/files/excel/data_".date('YmdHis', time()).".xls"; $objWriter->save($_SERVER['DOCUMENT_ROOT'].$file_name);아마.. 잘 될거라 생각합니다; |
|||
다음글 | set_value 시 htmlspecialchars 가... (3) | ||
이전글 | 설정없이 GET으로 전달한 Query String 가져... (6) | ||
터프키드
/
2010/03/30 13:53:17 /
추천
0
ㅜㅜ 2007은 잘안되네요
|
변종원(웅파)
/
2010/03/30 14:52:07 /
추천
0
한글화된 팁 감사합니다. ^^ |
kirrie
/
2010/03/30 22:14:14 /
추천
0
스쿨에 최근 버전에 대응하는 라이브러리가 올라왔던 것으로 기억합니다. 팁택한번 훑어보심이.. ㅎㅎ;;
|
가우리언
/
2010/03/31 00:06:15 /
추천
0
Excel 2007 로의 출력은 아래와 같은 방식으로 하시면 된답니다. 좀더 자세한 설명은 PHPExcel 다운로드 받으시면 워드로 된 문서가 있으며, 샘플코드들을 참고하시면 큰 도움이 될 거에요.
// 파일 다운로드 (Excel2007) header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="IP_LIST.xlsx"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); |
터프키드
/
2010/03/31 12:10:33 /
추천
0
두분 감사합니다;
방법을 찾긴 했지만 두분이 말씀하신 부분과 다르니 두분이 말씀하신것도 해봐야겟네요 일단 제가 한 방법은 파일명 변경으로 인해서 2007 관련 파일들이 경로 에러를 뱉는데요 Writer/Excel2007 하위에 있는 모든 파일을 열어 Excel2007.php 을 PHPExcel_Writer_Excel2007.php 로 변경했습니다 그리고 ZipArchive 에러가 뜨는데 윈도우 환경이든 리눅스 환경이든 php_zip 모듈이 활성화 안되어있으면 뜨네요 php.ini 를 열어서 주석풀고 하니 됩니다 소스는 // < Excel 2003 //$objWriter = $this->excelwriterloader->load("PHPExcel_Writer_Excel5", $exObj); //$file_path = "/files/excel/"; //$file_name = "name_".date('YmdHis', time()).".xls"; // > Excel 2007 $objWriter = $this->excelwriterloader->load("PHPExcel_Writer_Excel2007", $exObj); $file_path = "/files/excel/"; $file_name = "name_".date('YmdHis', time()).".xlsx";입니다.. |
대마불사
/
2012/04/13 14:25:28 /
추천
0
저는 위 설명처럼 했는데 잘 안되더군요...
포럼에서 찾은 방법으로 하니 되네요.. 혹시 안되시는 분들 참고하세요~ 1) Downloaded and installed CI 2.0 (welcome screen ok) 2) Downloaded PHPExcel 1.7.6 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 6) Added function excel1 to welcome.php controller <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 7) Tried to call function as http://localhost/index.php/welcome/excel1 |