<?php
//配置部分4-9行,将mysql数据库的表下载为excel的demo
// 数据库连接配置
$dbHost = 'localhost';
$dbUser = 'root';
$dbPass = 'yourpwd';
$dbName = 'yourdb';
// 指定要导出的表名
$tableName = 'yourtablename';
//以下不需要修改
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;
try {
// 创建数据库连接
$conn = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8mb4", $dbUser, $dbPass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 创建一个新的 Spreadsheet 对象
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 设置工作表标题(限制在31个字符内)
$sheet->setTitle(substr($tableName, 0, 31));
// 获取表结构信息
$stmt = $conn->query("DESCRIBE `$tableName`");
$columns = $stmt->fetchAll(PDO::FETCH_COLUMN);
// 写入列标题
$colLetter = 'A';
foreach ($columns as $column) {
$sheet->setCellValue($colLetter . '1', $column);
$colLetter++;
}
// 获取表数据
$stmt = $conn->query("SELECT * FROM `$tableName`");
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 写入数据
$rowNumber = 2;
foreach ($data as $row) {
$colLetter = 'A';
foreach ($row as $value) {
// 处理NULL值
$value = ($value === null) ? '' : $value;
$sheet->setCellValue($colLetter . $rowNumber, $value);
$colLetter++;
}
$rowNumber++;
}
// 自动调整列宽
foreach (range('A', $colLetter) as $columnID) {
$sheet->getColumnDimension($columnID)->setAutoSize(true);
}
// 冻结首行(标题行)
$sheet->freezePane('A2');
// 设置文件名和保存路径
$filename = $tableName . '_数据导出_' . date('Ymd_His') . '.xlsx';
// 使用IOFactory保存文件(PhpOffice 4.0推荐方式)
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save($filename);
// 输出完成信息和下载链接
echo "<h3>表数据导出完成</h3>";
echo "<p>文件已保存为: " . htmlspecialchars($filename) . "</p>";
echo '<p><a href="' . htmlspecialchars($filename) . '" download>点击此处下载文件</a></p>';
echo '<p>如果下载没有自动开始,请右键链接并选择"另存为"</p>';
} catch (PDOException $e) {
die("<h3>数据库错误</h3><p>" . htmlspecialchars($e->getMessage()) . "</p>");
} catch (Exception $e) {
die("<h3>Excel导出错误</h3><p>" . htmlspecialchars($e->getMessage()) . "</p>");
}
需要配置数据库连接和$tableName变量,变量是要导出的mysql的表名