메뉴 건너뛰기

프로그램언어

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

기존 엑셀 2003까지 버전은 확장자가 xls 로 생성되며 한시트에 최대 65,535 라인까지 처리할 수 있다.

그 이상의 행을 처리하려면 엑셀 2007 이상의 버전에서 xlsx 파일로 생성해야 한다. (100만 라인까지 가능)


기본 65,535라인을 넘는 데이터를 처리해야 할 경우 PHPExcel 클래스를 이용해 간단히 처리할 수 있다.

참고로 서버에 zip 라이브러리가 설치되어 있어야 한다.


먼저 PHPExcel 클래스를 다운로드 받자

http://www.codeplex.com/PHPExcel 에 방문하여 최신 버전을 내려받는다.


현재 기준으로 1.7.9 버전이 최신이다.

파일을 내려 받으면 PHPExcel_1.7.9_doc.zip 라는 파일이 받아진다.

압축을 풀어 서버에 업로드 한다. 


나의 경우에는 서버 계정의 _lib 디렉토리에 업로드 하고 디렉토리명을 PHPExcel 로 설정했다.


POST로 엑셀파일을 업로드 하는 폼 페이지는 생략 하겠다.

아래는 폼 페이지에서 파일을 업로드 하면 실행하는 파일이다.

(POST 로 날라오는 파일 폼 이름이  "upfile" 이라 정하면)


<?php

include $_SERVER["DOCUMENT_ROOT"]."/_lib/PHPExcel/Classes/PHPExcel.php";

$UpFile = $_FILES["upfile"];

$UpFileName = $UpFile["name"];


$UpFilePathInfo = pathinfo($UpFileName);
$UpFileExt = strtolower($UpFilePathInfo["extension"]);

if($UpFileExt != "xls" && $UpFileExt != "xlsx") {
echo "엑셀파일만 업로드 가능합니다. (xls, xlsx 확장자의 파일포멧)";
exit;
}

//-- 읽을 범위 필터 설정 (아래는 A열만 읽어오도록 설정함  => 속도를 중가시키기 위해)
class MyReadFilter implements PHPExcel_Reader_IReadFilter
{
public function readCell($column, $row, $worksheetName = '') {
// Read rows 1 to 7 and columns A to E only
if (in_array($column,range('A','A'))) {
return true;
}
return false;
}
}
$filterSubset = new MyReadFilter();

//업로드된 엑셀파일을 서버의 지정된 곳에 옮기기 위해 경로 적절히 설정
$upload_path = $_SERVER["DOCUMENT_ROOT"]."/Uploads/Excel_".date("Ymd");
$upfile_path = $upload_path."/".date("Ymd_His")."_".$UpFileName;
if(is_uploaded_file($UpFile["tmp_name"])) {

if(!move_uploaded_file($UpFile["tmp_name"],$upfile_path)) {
echo "업로드된 파일을 옮기는 중 에러가 발생했습니다.";
exit;
}

//파일 타입 설정 (확자자에 따른 구분)
$inputFileType = 'Excel2007';
if($UpFileExt == "xls") {
$inputFileType = 'Excel5';
}

//엑셀리더 초기화
$objReader = PHPExcel_IOFactory::createReader($inputFileType);

//데이터만 읽기(서식을 모두 무시해서 속도 증가 시킴)
$objReader->setReadDataOnly(true);

//범위 지정(위에 작성한 범위필터 적용)
$objReader->setReadFilter($filterSubset);

//업로드된 엑셀 파일 읽기
$objPHPExcel = $objReader->load($upfile_path);

//첫번째 시트로 고정
$objPHPExcel->setActiveSheetIndex(0);

//고정된 시트 로드
$objWorksheet = $objPHPExcel->getActiveSheet();

  //시트의 지정된 범위 데이터를 모두 읽어 배열로 저장
$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
$total_rows = count($sheetData);

foreach($sheetData as $rows) {

$fieldData = $rows["A"]; //A열값을 가져온다.
    /* 데이터 처리 */

}

}
.
.
?>


위 데이터 처리 부분에 원하는 처리를 하면 되겠다.

데이터를 100만건까지 처리 하다보니 서버의 부담이 커서 데이터 시트 범위를 정하고, 서식을 모두 버리고 데이터만 처리하도록 세팅했다.


List of Articles
번호 제목 날짜 조회 수
207 PHP XML 문서파싱 (SAX 방식 , DOM 방식) file 2018.10.26 704
206 PHP split()와 explode()의 차이점 2018.10.26 699
205 PHP eregi가 빠를까, strpos가 빠를까? 2018.10.26 713
204 PHP 확장 모듈을 이용한 C 라이브러리 사용 2018.10.26 709
203 자바스크립트 이스케이프 문자열을 PHP로 디코딩 하기 2018.10.26 676
202 이미지 땡겨와서 출력하기 2018.09.27 1152
201 DB 연동 4단 셀렉트 박스 2018.09.27 1184
200 PHP에서의 대칭 암호화/복호화 ― 간단한 예제에서 DB 입/출력까지 2018.09.14 587
199 PHP에서 자료, 데이터의 타입을 확인하는 방법, gettype() 2018.08.29 572
198 PHP에서 모든 세션 정보를 화면에 출력하는 방법 2018.08.29 576
197 한글이 깨져서 나올 때 - iconv 2018.08.29 814
196 날짜/시간함수 정리 2018.08.29 608
195 웹서버조회 소스 2018.07.24 1246
194 헤더이용 다운로드 받을시 바로열기부분 소스 2018.07.24 2043
193 키를 이용한 암호화/복호화 함수입니다. 2018.07.24 1491
192 MySQL테이블의 내용을 엑셀파일(xls)로 다운로드 하기 2018.07.24 1401
191 날짜계산 몇일까지.. [ ex)4 일전 new 표시 ] 2018.07.24 1154
190 게시판 내용 숨김 클릭시 내용 출력 [ 참고 ] 2018.07.24 1273
189 마우스 오버시 사진변환, 파일에러시 대체이미지 적용(소스일부) 2018.07.24 1262
188 PHP 소스코드 인코딩(암호화)하기 2018.07.19 1665
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved