테스트 사이트 - 개발 중인 베타 버전입니다

용량 큰 엑셀 파일 처리엔 Spout

최근에 파일 용량이 큰 엑셀 파일을 읽어서 DB에 데이터를 기록하는 걸 개발했는데

용량이 크니까 PHPExcel 에서는 처리가 되지 않고 오류를...

 

그래서 찾아낸 Spout : https://github.com/box/spout

 

개발환경이 PHP 5.6.x 라서 이 버전에 사용할 수 있는 2.7.3 버전을 사용했습니다.

설치는 컴포저로 했으며 만약 컴포저 사용이 어려울 때는 아래의 require 코드를 추가해줍니다.

 

버전 3.x 에서는 class 명 등이 변경됐으니 그에 맞게 사용하면 됩니다.

 

[code]

require_once '[PATH/TO]/src/Spout/Autoloader/autoload.php';

[/code]

 

[code]

<?php
ini_set('memory_limit', '-1');
ini_set('max_execution_time', '0');

 

$file = __DIR__.'/patent.xlsx';

 

use Box\Spout\Reader\ReaderFactory;
use Box\Spout\Common\Type;

 

$reader = ReaderFactory::create(Type::XLSX);

$reader->open($file);

 

foreach ($reader->getSheetIterator() as $sheet) {
    //if ($sheet->getIndex() > 0)
    //    break;
    foreach ($sheet->getRowIterator() as $row) {
        print_r($row);
    }
}

 

$reader->close();

[/code]

 

실제 사용해본 경험으로는 11MB 정도의 엑셀 파일을 읽고 데이터를 입력하는데 10초 정도

소요되는 듯 했습니다. 물론 이 시간은 서버 환경 등에 따라 달라질 수 있습니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 13개

오... 엑셀 용량은 항상 걸림돌이었는데요...
좋은 정보 감사합니다.~
맞습니다. 용량이 문제가 될 때가 많았죠!
좋은정보 감사합니다!
좋은? 정보일지는..
감사합니다.
혹시 db를 엑셀로 만드는것도 가능 한가요?
문서에는 가능한 걸로 보입니다.
https://opensource.box.com/spout/docs/

게시글 목록

번호 제목
16329
16328
16327
16326
16325
16324
16323
16322
16321
16320
16319
16318
16317
16316
16315
16310
16309
16308
16305
16304
16303
16302
16301
16300
16299
16298
16297
16295
16294
16293