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

용량 큰 엑셀 파일 처리엔 Spout

· 4년 전 · 4308 · 13

최근에 파일 용량이 큰 엑셀 파일을 읽어서 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/

게시글 목록

번호 제목
18200
18195
18193
18181
18179
18173
18170
18164
18158
18155
18152
18151
18150
18140
18139
18138
18131
18130
18120
18119
18118
18117
18116
18111
18110
18108
18107
18106
18100
18090