카테고리 없음
PHP 엑셀 파일 불러올때 load 에러,업로드 하지않고 폼데이터로 바로 불러오기
Sm_Developer
2022. 4. 27. 14:55
ㅡ
php에서 엑셀파일을 불러와 데이터형식으로 변환한다음 db에 저장을 하고 싶었다.
블로그를 찾던 도중 소스코드를 발견해서 그대로 붙여넣었는데??
위사진처럼 에러가 떳다.
삽질을 한 20분 하다가 알게되었다.
일단 블로그에서 줍줍한코드
<html>
<?require_once $_SERVER["DOCUMENT_ROOT"]."/lib/PHPExcel/Classes/PHPExcel.php";?>
<html>
<head>
<title>:: PHPExcel 파일읽기 ::</title>
</head>
<form enctype="multipart/form-data" action="./excel_read.php" method="post">
<table border="1">
<tr>
<th style="background-color:#DCDCDC">파일</th>
<td><input type="file" name="excelFile"/></td>
</tr>
<tr>
<th style="background-color:#DCDCDC">등록</th>
<td style="text-align:center;"><input type="submit" value="업로드"/></td>
</tr>
</form>
</html>
<php>
<?
require_once $_SERVER["DOCUMENT_ROOT"]."/lib/PHPExcel/Classes/PHPExcel.php";
require_once $_SERVER["DOCUMENT_ROOT"]."/lib/PHPExcel/Classes/PHPExcel/IOFactory.php";
$objPHPExcel = new PHPExcel();
$allData = array();
$filename = $_FILES['excelFile']['name']; // 읽어들일 엑셀 파일의 경로와 파일명을 지정한다.
/*$filename = iconv("UTF-8", "EUC-KR", $_FILES['excelFile']['name']);*/
try {
// 업로드한 PHP 파일을 읽어온다.
$objPHPExcel = PHPExcel_IOFactory::load($filename);
$sheetsCount = $objPHPExcel -> getSheetCount();
// 시트Sheet별로 읽기
for($i = 0; $i < $sheetsCount; $i++) {
$objPHPExcel -> setActiveSheetIndex($i);
$sheet = $objPHPExcel -> getActiveSheet();
$highestRow = $sheet -> getHighestRow(); // 마지막 행
$highestColumn = $sheet -> getHighestColumn(); // 마지막 컬럼
// 한줄읽기
for($row = 1; $row <= $highestRow; $row++) {
// $rowData가 한줄의 데이터를 셀별로 배열처리 된다.
$rowData = $sheet -> rangeToArray("A" . $row . ":" . $highestColumn . $row, NULL, TRUE, FALSE);
// $rowData에 들어가는 값은 계속 초기화 되기때문에 값을 담을 새로운 배열을 선안하고 담는다.
$allData[$row] = $rowData[0];
}
}
} catch(exception $e) {
echo $e;
}
print_r($allData);exit;
?>
위처럼 했는데 작동이 되지않았다.
이유는 $filename의 경로문제엿다.
아래는 form타입으로 file을 submit 받을 때 배열이다.
: $_FILES['userfile']['tmp_name'] - 웹 서버에 임시로 저장된 파일의 위치.
: $_FILES['userfile']['name'] - 사용자 시스템에 있을 때의 파일 이름.
: $_FILES['userfile']['size'] - 파일의 바이트 크기.
: $_FILES['userfile']['type'] - 파일의 MIME 타입을 가리킴. 예를 들어, text/plain이나 image/gif.
: $_FILES['userfile']['error'] - 파일 업로드할 때 일어난 오류 코드를 알려주는데, PHP 4.2.0에서 추가됨.
$objPHPExcel = PHPExcel_IOFactory::load($filename);
$filename에는 파일의 경로가 필요하다.
form 타입으로 받은 file데이터는 tmp_name 이라는 경로에 임시로 저장이 되어있다.
수정한코드
<?
require_once $_SERVER["DOCUMENT_ROOT"]."/lib/PHPExcel/Classes/PHPExcel.php";
require_once $_SERVER["DOCUMENT_ROOT"]."/lib/PHPExcel/Classes/PHPExcel/IOFactory.php";
$objPHPExcel = new PHPExcel();
$allData = array();
$filename = $_SERVER["DOCUMENT_ROOT"].'/lib/sample.xlsx'; // 읽어들일 엑셀 파일의 경로와 파일명을 지정한다.
/*$filename = iconv("UTF-8", "EUC-KR", $_FILES['excelFile']['tmp_name']);*/
try {
// 업로드한 PHP 파일을 읽어온다.
$objPHPExcel = PHPExcel_IOFactory::load($_FILES['excelFile']['name']);
$sheetsCount = $objPHPExcel -> getSheetCount();
// 시트Sheet별로 읽기
for($i = 0; $i < $sheetsCount; $i++) {
$objPHPExcel -> setActiveSheetIndex($i);
$sheet = $objPHPExcel -> getActiveSheet();
$highestRow = $sheet -> getHighestRow(); // 마지막 행
$highestColumn = $sheet -> getHighestColumn(); // 마지막 컬럼
// 한줄읽기
for($row = 1; $row <= $highestRow; $row++) {
// $rowData가 한줄의 데이터를 셀별로 배열처리 된다.
$rowData = $sheet -> rangeToArray("A" . $row . ":" . $highestColumn . $row, NULL, TRUE, FALSE);
// $rowData에 들어가는 값은 계속 초기화 되기때문에 값을 담을 새로운 배열을 선안하고 담는다.
$allData[$row] = $rowData[0];
}
}
} catch(exception $e) {
echo $e;
}
print_r($allData);exit;
?>
잘된다.