Excel スプレッドシート用の PHP クラス ライブラリ: PHP_XLSXWriter
PHP_XLSXWriter は、Microsoft Excel 2007 以降の xlsx ファイルを生成するための PHP ライブラリです。XLSX は、Excel 2007 以降のオープンな XML ベースのファイル標準を使用してスプレッドシート データを保存するための形式です。PHP_XLSXWriter ライブラリは、PHP 配列から XLSX ファイルにデータを書き込むためのシンプルな API を提供します。複数のワークシートと大量のデータを含むファイルを書き込むことができ、自動調整を使用して大量のデータを処理します。
他の Excel ライブラリと比較した場合、PHP_XLSXWriter の主な利点は次のとおりです。
-
高パフォーマンス - PHP_XLSXWriter は zipArchive 関数を使用してデータ ファイルを圧縮します。これは高速で、生成されるファイルは比較的小さいです。
-
安定した動作 - PHP_XLSXWriter は実行するために他のライブラリやプラグインに依存する必要がなく、他のライブラリよりも移植性が高くなります。
-
シンプルで使いやすいコード - PHP_XLSXWriter の API はシンプルで柔軟性があり、読みやすく、保守しやすいです。
-
大規模なデータ セットのサポート - PHP_XLSXWriter は大量のデータを処理でき、採用された適応処理大容量データ テクノロジは、大規模なデータ セットを扱う場合に非常に信頼性が高くなります。
1. PHP_XLSXWriterとPHPExcelの違い
PHP_XLSXWriter と PHPExcel は両方とも Excel スプレッドシートを操作するために使用される PHP クラス ライブラリであり、それらの違いは主に次の点に反映されます。
- 速度とメモリ消費量
PHP_XLSXWriter は PHPExcel と比較して、大量のデータを操作する場合に高速であり、メモリ リソースも節約できます。
- 外部依存関係
PHPExcel は Excel ファイルを操作するために LibreOffice や OpenOffice などのサードパーティ ライブラリに依存する必要がありますが、PHP_XLSXWriter は外部依存関係を必要とせず、OpenXML 形式でスプレッドシート ファイルを直接生成できます。
- 機能性と柔軟性
PHPExcel は関数が非常に豊富で、さまざまな Excel 形式での読み取りおよび書き込み操作をサポートし、数式計算などの高度な Excel 操作も処理できます。対照的に、PHP_XLSXWriter は PHPExcel ほど強力ではありませんが、その設計はより柔軟であり、データを簡単に処理およびフォーマットできます。
- 開発者サポート
PHPExcel は 2018 年にメンテナンスとサポートの終了を発表しました。引き続き使用できますが、将来的に互換性とセキュリティの問題が発生する可能性があります。対照的に、PHP_XLSXWriter は現在も積極的に保守および開発が行われており、将来的にはさらに機能とパフォーマンスが向上する予定です。
要約すると、Excel ファイル操作に高度な柔軟性とパフォーマンスが必要な場合は、PHP_XLSXWriter を選択できます。複雑な Excel ファイルを処理し、高度な Excel 操作を使用する必要がある場合は、PHPExcel を使用できます。ただし、PHPExcel の開発およびサポートが終了していることを考慮すると、PhpSpreadsheet などの新しいクラス ライブラリを使用することをお勧めします。
2、PHP_XLSXWriter の使用
1. 使用手順
PHP_XLSXWriter は、Microsoft Excel OpenXML 形式のスプレッドシート (xlsx) を生成するための PHP クラス ライブラリです。PHP_XLSXWriter ライブラリを使用すると、Excel スプレッドシートを生成するのに非常に便利で、複数のデータ型と Excel のさまざまな書式設定オプションがサポートされます。PHP_XLSXWriter を使用するための基本的な手順をいくつか示します。
-
PHP_XLSXWriter クラス ライブラリ: Portalをダウンロードしてインストールします。このクラス ライブラリは Github でダウンロードでき、ダウンロードしたファイルはプロジェクト内の任意の場所に配置できます。
-
XLSXWriter のインスタンスを作成します。コードは以下のように表示されます。
require_once 'path/to/XLSXWriter.php';
$writer = new XLSXWriter();
- タイトルやワークシート名など、Excel スプレッドシートに書き込む基本情報を設定します。サンプルコードは次のとおりです。
$writer->setTitle('My Excel Document');
$writer->setSubject('Document Subject');
$writer->setAuthor('Author Name');
$writer->setDescription('Document Description');
$writer->setKeywords('keywords, go, here');
$sheet_name = 'Sheet1';
$writer->writeSheetHeader($sheet_name, array('Column 1'=> 'string', 'Column 2'=> 'string', 'Column 3'=> 'string', 'Column 4'=> 'string', 'Column 5'=> 'string', 'Column 6'=> 'string'));
- データを Excel スプレッドシートに書き込みます。サンプルコードは次のとおりです。
$data = array(
array('Value 1-1', 'Value 1-2', 'Value 1-3', 'Value 1-4', 'Value 1-5', 'Value 1-6'),
array('Value 2-1', 'Value 2-2', 'Value 2-3', 'Value 2-4', 'Value 2-5', 'Value 2-6'),
array('Value 3-1', 'Value 3-2', 'Value 3-3', 'Value 3-4', 'Value 3-5', 'Value 3-6'),
array('Value 4-1', 'Value 4-2', 'Value 4-3', 'Value 4-4', 'Value 4-5', 'Value 4-6'),
array('Value 5-1', 'Value 5-2', 'Value 5-3', 'Value 5-4', 'Value 5-5', 'Value 5-6'),
);
foreach($data as $row) {
$writer->writeSheetRow($sheet_name, $row);
}
- Excel スプレッドシートを保存します。サンプルコードは次のとおりです。
$filename = 'my_excel_file';
$writer->writeToFile($filename . '.xlsx');
上記は、PHP_XLSXWriter ライブラリを使用して Excel ファイルを生成する基本的なプロセスです。実際のニーズに応じて各ステップのコードを調整して、必要な効果を実現できます。
2. バックグラウンドダウンロード
関数のカプセル化は、一連の関連する操作を関数に結合し、外部への統一インターフェイスを提供する実践です。その主な利点は次のとおりです。
- コードの再利用性と保守性の向上
いくつかの一般的な操作を関数に抽象化し、モジュール形式でコードを編成します。これにより、コードを繰り返し記述することなく、異なるコード領域で同じ関数を共有できるため、コードの再利用性と保守性が向上します。
- コードの可読性の向上
関数名を使用して関数の機能を説明すると、コードの可読性が向上し、コードの理解と保守が容易になります。カプセル化によってコードをモジュール化できるため、理解と保守が容易になります。
- コードのカプセル化とセキュリティを向上させる
カプセル化により内部の詳細を隠し、必要なインターフェイスのみを公開できるため、コードのカプセル化とセキュリティが向上します。カプセル化は、内部データへのアクセスを制限することでデータの整合性を確保し、データが悪意を持って改ざんされる危険を回避することもできます。
- コードの実装とメンテナンスを簡素化する
いくつかの一般的な操作をカプセル化することで、コードの実装とメンテナンスの複雑さが大幅に簡素化され、エラーの可能性が減り、開発者はビジネス ロジックの実装により集中できるようになります。
結論として、関数のカプセル化は、効率的で読みやすく、保守しやすく、堅牢で安全なコードを作成するのに役立つ優れた方法です。
/*封装函数
$data,array,数据
$header,标头名称
*/
function makeExcel($data, $header)
{
require_once "libs/xlsxwriter/xlsxwriter.class.php";
//实例化
$writer = new XLSXWriter();
//文件属性
$writer->setTitle('My Excel Document');
$writer->setSubject('Document Subject');
$writer->setAuthor('Author Name');
$writer->setDescription('Document Description');
$writer->setKeywords('keywords, go, here');
$sheet_name = 'Sheet1';
$writer->writeSheetHeader($sheet_name, $header);
foreach ($data as $row) {
$writer->writeSheetRow($sheet_name, $row);
}
$filename = md5(time()) . '.xlsx';
$writer->writeToFile('upload/' . $filename);
}
//表头
$header = array('序号' => 'int', '姓名' => 'string', '性别' => 'string', '单位' => 'string', '职务' => 'string', '学历' => 'string');
//二维数组
$len = 10000;
$data = array();
for ($j = 0; $j < $len; $j++) {
$data[$j] = array($j + 1, '姓名' . $j, '性别' . $j, '单位' . $j, '职务' . $j, '学历' . $j);
}
//生成表格
makeExcel($data, $header);
3. ブラウザのダウンロード
次のコードを使用すると、PHP_XLSXWriter によって生成された Excel ファイルをブラウザから直接ダウンロードできます。
// 导入 PHP_XLSXWriter 库
require 'path/to/PHP_XLSXWriter.php';
// 创建 XLSXWriter 实例
$writer = new XLSXWriter();
// 添加数据到 Excel 文档
$data = array(
array('姓名', '年龄', '城市'),
array('张三', 28, '北京'),
array('李四', 22, '上海'),
array('王五', 31, '广州')
);
$writer->writeSheet($data);
// 定义下载的文件名
$filename = 'example.xlsx';
// 告诉浏览器输出的内容类型为 Excel
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
// 告诉浏览器文件的大小和名称
header('Content-Disposition: attachment;filename="'. $filename .'"');
// 将 Excel 文件输出到浏览器
$writer->writeToStdOut();
exit();
上の例では、最初にXLSXWriter
インスタンス、いくつかのデータを追加しました。次に、PHPheader()
関数出力コンテンツ タイプが Excel であることをブラウザーに伝え、ダウンロードしたファイルの名前を指定します。最後に、Excel ファイルをブラウザに出力し、exit()
関数。
このようにして、ユーザーがダウンロード リンクをクリックすると、ブラウザはダウンロード操作を開始し、生成された Excel ファイルをローカル ディスクに保存します。
4. カプセル化機能
この機能でバックグラウンド実行とブラウザーのダウンロードを同時にサポートできるようにします。
/*封装函数
* $data,array,数据;
* $header,array,标头名称;
* $export,输出方式0后台运行1浏览器下载;
*/
function makeExcel($data, $header, $export = 0)
{
require_once "libs/xlsxwriter/xlsxwriter.class.php";
//实例化
$writer = new XLSXWriter();
//文件属性
$writer->setTitle('My Excel Document');
$writer->setSubject('Document Subject');
$writer->setAuthor('Author Name');
$writer->setDescription('Document Description');
$writer->setKeywords('keywords, go, here');
$sheet_name = 'Sheet1';
$writer->writeSheetHeader($sheet_name, $header);
//文件名称
$filename = md5(time()) . '.xlsx';
//设置下载方式
if ($export == 0) {
foreach ($data as $row) {
$writer->writeSheetRow($sheet_name, $row);
}
$writer->writeToFile('upload/' . $filename);
} else {
$writer->writeSheet($data);
// 告诉浏览器输出的内容类型为 Excel
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
// 告诉浏览器文件的大小和名称
header('Content-Disposition: attachment;filename="' . $filename . '"');
// 将 Excel 文件输出到浏览器
$writer->writeToStdOut();
exit();
}
}
@リークタイムも時々あります