![](https://habrastorage.org/getpro/habr/post_images/436/074/132/436074132316c50f7fa3e000d50458ee.jpg)
ツールとして何を使用しますか?
住所データベースをインポートするときに使用される基本的な標準として、Microsoft Excelを使用しました。 説明は簡単です:
- これは、基本レベルでコンピューターユーザーの100%が所有する標準ツールです。 さらに、ビジネスでは事実上の企業標準であり、動作中のMacまたはLinuxコンピューターであっても使用されます。
- ほとんどすべてのCRM、CMS、クラウド、またはデスクトップシステムはExcelまたはCSVにエクスポートされ、簡単に再保存することでXLSまたはXLSX形式に変換できます。
- また、「ソフトウェアエラーの90%がモニターから0.5メートル離れている」ことも知られています。 通常のユーザーには攻撃はありませんが、最も基本的なトレーニングレベルとそれらを考慮する必要があります。 説明のサポートは、「Excelファイルをダウンロードする」と言うだけで十分であり、目的の形式でファイルを準備する手順を説明することはできません。
アドレスデータベースをインポートする際のユーザーの問題は削除されました。 しかし、ここでは開発自体の問題が発生します。
開発者としての痛み
Excelはオープンソース開発ではなく、独自のソリューションです。 特に2007年以降の新しいバージョン(xlsx)でのデータ形式は簡単ではありません。 PHPはPechkinaで使用されているため、この問題を解決できるライブラリを探し始めました。 しかし、ここで、多くのライブラリがxlsxの読み取りを許可しないという問題に遭遇しました。
- php-spreadsheetreaderはさまざまな形式(.xls、.ods、および.csv)を読み取ります
- PHP-ExcelReader (xlsのみ)
- PHP_Excel_Reader (xlsのみ)
- PHP_Excel_Reader2 (xlsのみ)
- XLSファイルリーダーコマーシャルおよびxlsのみ
- SimpleXLSX説明から、xlsxは読み取ることができますが、著者はxlsのみを参照しています
- PHP Excel Explorerコマーシャルおよびxlsのみ
PHPExcelライブラリーが注目を集めました。 数年前にSMS24X7.ru sms-mailingサービスで使用しました 。 才能のある開発者であるPetya Sokolov( Petr_Sokolov )は、このライブラリのラッパーを作成し、その多くの欠陥とバグを修正しました。
ライブラリは確かに興味深いものであり、開発されています。 しかし、Pechkinにとっては、私たちとお客様の両方が成長した数年後、リソースに対する壊滅的な要求とファイルの解析に膨大な時間を費やして使用できなくなりました。 たとえば、100,000行を超えるアドレスデータベースを複雑な構造でサービスにダウンロードすることは珍しくありません。 また、ファイルの長さがすでに500,000行で、30 MBを超える「重量」がある場合はどうでしょうか。
そして、私たちは手放されました...
を検索したところ 、Stackoverflowで「 makeshiftベンチマーク」の結果を見て、 libxl商用ライブラリを見つけました。
ライブラリはC ++で記述されており、 Ilia Alshanetskyの PHP用の優れたオブジェクト指向拡張機能のおかげで、学習と統合が簡単です(たとえば、現在のソリューションをPHPExcelからLibXLに転送するのに約3時間かかりました)。 残念ながら、拡張機能の開発者からのドキュメントがなく、Reflection拡張機能を使用する必要があるため、これは非常にクールです。
インストールプロセスは非常に簡単です。
cd /usr/local/src/ wget http://libxl.com/download/libxl.tar.gz tar zxfv libxl.tar.gz cd libxl-3.5.4.1/ ln -s include_c include cd ../ wget https://github.com/iliaal/php_excel/archive/master.zip unzip master.zip cd php_excel-master/ ./configure --with-excel --with-libxl-libdir=../libxl-3.5.4.1/lib64 --with-libxl-incdir=../libxl-3.5.4.1/include_c make make test make install
コンパイルの結果、/ usr / lib / php5 / 20090626 /フォルダーにexcel.soファイルが作成されます。 次に、内容を含むファイル/etc/php5/conf.d/excel.iniを作成します。
extension=excel.so
モジュールがインストールされているかどうかを確認し、Webサーバーを再起動します。
php -m | grep excel service lighttpd restart
コードでは、すべてが非常に単純です。 ファイルをダウンロードし、必要なセルを読み取ります。 たとえば、次のように:
$doc = new ExcelBook(); $doc->loadFile('example.xls'); for($r=$sheet->firstRow();$r<=$sheet->lastRow();$r++){ for($c=$sheet-> firstCol();$c<=$sheet-> lastCol();$c++){ echo ': '.$r.' : '.$c.' : '.$sheet->read($r,$c).'<br />'; } }
パフォーマンス結果
RAMの必要性の欠如(ファイルのダウンロードと読み取りのプロセスで)は喜んで喜んでいた。
![](https://habrastorage.org/getpro/habr/post_images/06c/bbe/1e4/06cbbe1e4598038cb5b16350059aa079.png)
また、Excelファイルの読み込み速度と、さまざまなサイズのアドレスベースでの読み取り速度が向上しています。
![](https://habrastorage.org/getpro/habr/post_images/c54/915/9db/c549159dbbee487c12bef0eb5eaa0ae0.png)
これらのテストは、100分の1にN人のサブスクライバーがいるxlsxファイルで実行されました。 実際のアドレスベースはさらに大きく、より複雑であり、速度とメモリ消費の利点はさらに大きく見えます。
ライブラリのコストは開発ライセンスで199ドルですが、信じてください、それは価値があります。 もちろん、Excelファイルをサービスにインポートする問題に直面しているすべての人にお勧めします。