최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

직접 엑셀파일을 읽어오는 코드를 작성 해 보자.


방법은 크게 3가지 정도가 있고 여기서는 4분류로 나누어서 어떤 메서드로 어떻게 참조하여 가져오는지 보여준다.


일단 라이브러리를 다운받고 (버전 : PHPExcel_1.8.0 )


phpexcel.zip



예제1)

serpiko_example_01.zip



<?php
header("Content-Type:text/html; charset=utf-8");
header("Content-Encoding:utf-8");

error_reporting(E_ALL);
set_time_limit(0);
set_include_path(get_include_path() . PATH_SEPARATOR . './phpexcel/Classes/');

include_once 'PHPExcel.php';
include_once 'PHPExcel/IOFactory.php';

$objPHPExcel = new PHPExcel();
$fileName = './doc.xls';

echo "<!DOCTYPE html>
		<html>
			<head>
				<meta charset='utf-8'>
			</head>
			<body>";

try{
	
	// 업로드 된 엑셀 형식에 맞는 Reader객체를 만든다.
	$objReader = PHPExcel_IOFactory::createReaderForFile($fileName);

	// 읽기전용으로 설정
	$objReader->setReadDataOnly(true);

	// 엑셀파일을 읽는다
	$objExcel = $objReader->load($fileName);

	// 첫번째 시트를 선택
	$objExcel->setActiveSheetIndex(0);

	// 선택된 시트 가져오기
	$objWorksheet = $objExcel->getActiveSheet();

	/******************************************************************************
	* 1.Iteraor를 사용하여 foreach
	******************************************************************************/
	echo '<table border=1 cellspacing=5px cellpadding=5px;>';
	
	//모든 열
	$rowIterator = $objWorksheet->getRowIterator();

	foreach ($rowIterator as $row) {
		echo '<tr>';
		
		//모든 열의 모든 행
		$cellIterator = $row->getCellIterator();
		$cellIterator->setIterateOnlyExistingCells(false);
		
		foreach ($cellIterator as $cell) {
			echo '<td>'. $cell->getValue(). '</td>';
		}
		echo '</tr>';
	}
	echo '</table><br /><br />';

	/******************************************************************************
	* 2.워크시트에서 가장 높은 행과 열 번호를 얻어서 참조
	******************************************************************************/
	$highestRow  = $objWorksheet->getHighestRow();  // 열의 참조 : 4
	$highestColumn = $objWorksheet->getHighestColumn(); // 행의 참조 : F
	$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); // 알파벳 : F를 6

	echo '<table border=1>';
	for($row = 1; $row <= $highestRow; ++$row){
		echo '<tr>';
		
		for($col = 0; $col < $highestColumnIndex; ++$col){
			echo '<td>' . $objWorksheet->getCellByColumnAndRow($col, $row)->getValue() . '</td>';
		}
		echo '</tr>';
	}
	echo '</table> <br /><br />';
	
	/******************************************************************************
	* 3.getCell('Alphabet', int)을 이용한 특정 행의 반복 출력
	******************************************************************************/
	echo "<table border=1 cellspacing=5px cellpadding=5px;>";

	$highestRow = $objWorksheet->getHighestRow();
	for ($i = 2; $i < $highestRow; ++$i){ //두번째 행 부터 읽는다.
		echo "<tr>";
		$a = $objWorksheet->getCell('A' . $i)->getValue();
		$b = $objWorksheet->getCell('B' . $i)->getValue();
		$c = $objWorksheet->getCell('C' . $i)->getValue();
		echo "<td>".$a."</td>";
		echo "<td>".$b."</td>";
		echo "<td>".$c."</td>";
		echo "</tr>";
	}
	echo "</table><br /><br />";

	/******************************************************************************
	* 4.getCell('Alphabet', int)을 이용한 특정 행의 출력
	******************************************************************************/
	$a = $objWorksheet->getCell('A' . 4)->getValue();
	$b = $objWorksheet->getCell('B' . 4)->getValue();
	$c = $objWorksheet->getCell('C' . 4)->getValue();
	echo $a .',  ';
	echo $b .',  ';
	echo $c;
	
}catch(exception $e){
	echo '엑셀파일을 읽는도중 오류가 발생하였습니다.';
}

echo "</body>
	  </html>";
?>

예제2)


read2.php



<?php
header("Content-Type:texthtml; charset=utf-8");
header("Content-Encoding:utf-8");

include_once './phpexcel/Classes/PHPExcel.php';
include_once './phpexcel/Classes/PHPExcel/IOFactory.php';

function array_iconv( $Current, $Next, $Array , $AutoDetect = true ) { 
	$new_array = array(); 
	$Current = strtoupper($Current); 
	$Next = strtoupper($Next); 
	$encode = array($Current,str_replace('//IGNORE','',$Next)); 

	foreach($Array as $key => $val) { 
		if(is_string($key) && (($AutoDetect == true && mb_detect_encoding($key,$encode) == $Current) || $AutoDetect == false)) { 
			$key = iconv($Current, $Next, $key); 
		} 
		if(is_string($val) && (($AutoDetect == true && mb_detect_encoding($val,$encode) == $Current) || $AutoDetect == false)) { 
			$val = iconv($Current, $Next, $val); 
		} 
		if(is_array($val)) {
			$val = array_iconv( $Current, $Next, $val, $AutoDetect); 
		}

		$new_array[$key] = $val; 
	} 
	return $new_array; 
} 

$fileName = './doc.xls';
$objReader = PHPExcel_IOFactory::createReaderForFile($fileName);
$objReader->setReadDataOnly(true);
$objExcel = $objReader->load($fileName);
$objExcel->setActiveSheetIndex(0);

$objWorksheet = $objExcel->getActiveSheet()->toArray(null,true,true,true);

echo var_dump(array_iconv("UTF-8","EUC-KR",$objWorksheet,true));

?>



댓글