PHP-ExcelReader를 이용하여 엑셀 데이터를 DB에 입력하기

쇼핑몰 작업을 하다보면 엑셀에 대한 작업을 꽤 하게 된다. 엑셀파일을 이용한 상품정보 일괄등록 같은 기능이 많이 사용되는데 그런 기능을 구현하기 위해 PHP-ExcelReader 를 사용해보기로 했다. PHPExcel 이라는 뛰어난 라이브러리가 있지만 PHP 5.2 등의 요구사항을 충족시키는 것이 가능하지 않을 수도 있기 때문에 PHP-ExcelReader를 사용하기로 했다.

PHP-ExcelReader 파일 다운로드 : http://sourceforge.net/projects/phpexcelreader/files/latest/download

PHP-ExcelReader 를 사용하기 전에 수정해야할 것이 있는데 다운로드한 파일의 압축을 푼 후 reader.php 파일을 열어 31라인 부근의 아래 코드를 수정해야한다.

require_once 'Spreadsheet/Excel/Reader/OLERead.php';

위 코드를 아래와 같이 수정한다.

require_once 'oleread.inc';

파일의 경로가 잘못 지정되어 있는데 내가 다운로드한 파일에서만 이런 현상이 생겼는지도 모르겠다. 실행했을 때 경로 문제로 오류가 발생하면 경로를 수정해야할 것이다.

아래는 간단한 예제코드이다. 아래 테이블처럼 데이터가 엑셀 파일에 있을 때 이 데이트를 DB에 저장하는 것이다.

fld1 fld2 fld3
100 200 300
110 210 310
120 220 320
<?php
$file = 'excel.xls';

include_once('reader.php');

$data = new Spreadsheet_Excel_Reader();

// Set output Encoding.
$data->setOutputEncoding('UTF-8');

/***
* if you want you can change 'iconv' to mb_convert_encoding:
* $data->setUTFEncoder('mb');
*
**/

/***
* By default rows & cols indeces start with 1
* For change initial index use:
* $data->setRowColOffset(0);
*
**/

/***
*  Some function for formatting output.
* $data->setDefaultFormat('%.2f');
* setDefaultFormat - set format for columns with unknown formatting
*
* $data->setColumnFormat(4, '%.3f');
* setColumnFormat - set format for column (apply only to number fields)
*
**/

$data->read($file);

/*

 $data->sheets[0]['numRows'] - count rows
 $data->sheets[0]['numCols'] - count columns
 $data->sheets[0]['cells'][$i][$j] - data from $i-row $j-column

 $data->sheets[0]['cellsInfo'][$i][$j] - extended info about cell

    $data->sheets[0]['cellsInfo'][$i][$j]['type'] = "date" | "number" | "unknown"
        if 'type' == "unknown" - use 'raw' value, because  cell contain value with format '0.00';
    $data->sheets[0]['cellsInfo'][$i][$j]['raw'] = value if cell without format
    $data->sheets[0]['cellsInfo'][$i][$j]['colspan']
    $data->sheets[0]['cellsInfo'][$i][$j]['rowspan']
*/

error_reporting(E_ALL ^ E_NOTICE);

$comma = '';
$sql = " INSERT INTO `table`
            ( fld1, fld2, fld3 )
          VALUES ";

for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++) {
    $fld1 = addslashes($data->sheets[0]['cells'][$i][1]);
    $fld2 = addslashes($data->sheets[0]['cells'][$i][2]);
    $fld3 = addslashes($data->sheets[0]['cells'][$i][3]);

    $sql .= $comma." ( '$fld1', '$fld2', '$fld3' ) ";
    $comma = ' , ';
}

mysql_query($sql);
?>

위 코드에서 $i의 초기값을 2라고 지정한 것은 엑셀파일에서 fld1, fld2, fld3 라는 값은 저장하지 않기 위해서이다. 그리고 $data->setOutputEncoding(‘UTF-8’); 부분에서 캐릭터셋을 지정할 수 있는데 나의 경우는 DB에 저장될 캐릭터셋이 utf-8 이기 때문에 UTF-8로 지정했다.

편리

PHP와 MariaDB, jQuery 등을 사용해 게시판, 쇼핑몰 솔루션을 개발합니다. 그누보드5와 영카트5 개발에 참여 했습니다. Linux와 Nginx는 물론 WordPress, Git 등에도 관심이 많습니다. 자전거 타기 및 사진 촬영을 취미로 하고 있습니다.

2 thoughts to “PHP-ExcelReader를 이용하여 엑셀 데이터를 DB에 입력하기”

  1. 좋은 자료 공유해주셔서 감사합니다.
    덕분에 수월하게 해결했네요 ~ ^^

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.