You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取通过PhpSpreadsheet创建的Excel文件大小?

当然可以获取用PhpSpreadsheet生成的Excel文件大小啦!这里有几种实用的实现方法,你可以根据自己的使用场景来选择:

方法一:保存到物理文件后获取大小

如果你的需求是先把生成的Excel保存到服务器本地,再获取大小,这种方式最直接:

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

// 创建并填充表格数据
$spreadsheet = new Spreadsheet();
$activeSheet = $spreadsheet->getActiveSheet();
$activeSheet->setCellValue('A1', '测试数据');
$activeSheet->setCellValue('B1', 2024);

// 定义保存路径
$savePath = './my_generated_excel.xlsx';
// 写入文件
$writer = new Xlsx($spreadsheet);
$writer->save($savePath);

// 获取文件大小(单位:字节)
$fileSizeBytes = filesize($savePath);
// 转换成更易读的KB/MB格式
$fileSizeKB = round($fileSizeBytes / 1024, 2);
$fileSizeMB = round($fileSizeBytes / (1024*1024), 2);

echo "文件大小:{$fileSizeBytes} 字节 / {$fileSizeKB} KB / {$fileSizeMB} MB";

// 记得释放内存,避免内存泄漏
$spreadsheet->disconnectWorksheets();
unset($spreadsheet);
方法二:内存中生成后直接获取大小(无需保存到本地)

如果不想生成物理文件,比如要直接把Excel输出给用户同时知道文件大小,可以用这两种方式:

子方法1:利用输出缓冲区捕获内容

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();
// ... 填充你的表格数据 ...

// 开启输出缓冲区
ob_start();
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
// 捕获缓冲区内容并关闭缓冲区
$excelContent = ob_get_clean();

// 内容长度就是文件大小(字节)
$fileSize = strlen($excelContent);

// 如果要输出到浏览器下载,可以加上这些Header
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header("Content-Disposition: attachment;filename='download.xlsx'");
header('Content-Length: ' . $fileSize);
echo $excelContent;

// 释放内存
$spreadsheet->disconnectWorksheets();
unset($spreadsheet);

子方法2:使用内存流(php://temp)

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();
// ... 填充你的表格数据 ...

// 打开一个内存流
$tempStream = fopen('php://temp', 'r+');
$writer = new Xlsx($spreadsheet);
$writer->save($tempStream);

// 移动到流的末尾获取长度
fseek($tempStream, 0, SEEK_END);
$fileSize = ftell($tempStream);
// 重置流指针到开头,方便后续读取内容
rewind($tempStream);

echo "文件大小:{$fileSize} 字节";

// 后续可以读取流内容用于输出或其他操作
$excelContent = stream_get_contents($tempStream);
fclose($tempStream);

// 释放内存
$spreadsheet->disconnectWorksheets();
unset($spreadsheet);

小提示

  • filesize()、strlen()返回的都是字节数,你可以根据需求自行换算成KB、MB等单位;
  • 处理超大Excel文件时,内存流方式要注意PHP的内存限制,必要时可以调整php.ini里的memory_limit参数。

内容的提问来源于stack exchange,提问作者rhog23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:16:46