まず、MySQLデータベースとクエリに接続します。 ID 、名前、電子メールなどのフィールドを含む、ユーザーと呼ばれるテーブルがデータベースに既にあるとします。
<?php
// データベース接続設定
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
// 接続を作成します
$conn = new mysqli($servername, $username, $password, $dbname);
// 接続を確認してください
if ($conn->connect_error) {
die("接続に失敗しました: " . $conn->connect_error);
}
// クエリデータ
$sql = "SELECT id, name, email FROM users";
$result = $conn->query($sql);
?>
次に、PHPを使用して、クエリ結果をCSVファイルとしてエクスポートします。 mysqli_resultオブジェクトのデータは、線ごとに抽出され、CSVファイルに書き込まれます。
<?php
// クエリの結果が存在する場合
if ($result->num_rows > 0) {
// ファイル名を設定します
$filename = "users_data_" . date("Ymd_His") . ".csv";
// 応答ヘッダーを設定します,ブラウザにファイルをダウンロードするように伝えます
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '"');
// 出力ストリームを開きます
$output = fopen('php://output', 'w');
// ヘッダーに書き込みます
$header = ['ID', 'Name', 'Email'];
fputcsv($output, $header);
// データの行を書き込みます
while ($row = $result->fetch_assoc()) {
fputcsv($output, $row);
}
// 出力ストリームをオフにします
fclose($output);
}
?>
Excelファイルを直接生成することはもう少し複雑ですが、サードパーティのライブラリPHPEXCELまたはPHPSPREADSHEETを使用して実現できます。これらの2つのライブラリは、クエリ結果を.xlsまたは.xlsx形式のファイルにエクスポートするためのリッチな機能を提供します。
Excelのエクスポートの基本的な例を次に示します。まず、 phpspreadsheetをインストールする必要があります。
composer require phpoffice/phpspreadsheet
次に、PHPで次のコードを使用してデータをエクスポートします。
<?php
// 紹介された PhpSpreadsheet クラスライブラリ
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
// 新しいスプレッドシートオブジェクトを作成します
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// テーブルヘッダーの設定
$sheet->setCellValue('A1', 'ID');
$sheet->setCellValue('B1', 'Name');
$sheet->setCellValue('C1', 'Email');
// データを入力します
$rowNum = 2;
while ($row = $result->fetch_assoc()) {
$sheet->setCellValue('A' . $rowNum, $row['id']);
$sheet->setCellValue('B' . $rowNum, $row['name']);
$sheet->setCellValue('C' . $rowNum, $row['email']);
$rowNum++;
}
// ファイル名を設定します
$filename = "users_data_" . date("Ymd_His") . ".xlsx";
// 応答ヘッダーを設定します,ブラウザにファイルをダウンロードするように伝えます
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $filename . '"');
header('Cache-Control: max-age=0');
// 作成する Writer 物体
$writer = new Xlsx($spreadsheet);
// 出力ファイル
$writer->save('php://output');
?>
印刷のためにデータテーブルをユーザーに提示したい場合は、クエリ結果をHTMLテーブルとして出力できます。ユーザーは、ブラウザの印刷機能を使用して直接印刷できます。
<?php
// クエリの結果が存在する場合
if ($result->num_rows > 0) {
echo '<table border="1">';
echo '<thead>';
echo '<tr><th>ID</th><th>Name</th><th>Email</th></tr>';
echo '</thead>';
echo '<tbody>';
// 出力データライン
while ($row = $result->fetch_assoc()) {
echo '<tr>';
echo '<td>' . $row['id'] . '</td>';
echo '<td>' . $row['name'] . '</td>';
echo '<td>' . $row['email'] . '</td>';
echo '</tr>';
}
echo '</tbody>';
echo '</table>';
// 印刷ボタンを追加します
echo '<br><button onclick="window.print()">フォームを印刷します</button>';
}
?>
このようにして、ユーザーは印刷ボタンをクリックして、テーブルフォームのページコンテンツを印刷できます。