| 제목 | 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 |