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