PHP8.2.4用PhpOffice\PhpSpreadsheet将mysql数据库的某个表导出到excel,实测可用

<?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的表名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值