<?php
class xlsTools
{
var $inEncode = \'utf-8\';
var $outEncode = \'gb2312\';
protected $rowCount; //存储已经存在内存中的记录条数
protected $rowFlushCount;// 一次flush的数据条数
public function __construct($rowFlushCount = 1000)
{
$this->rowFlushCount = $rowFlushCount;
$this->rowCount = 0;
}
public function __destruct()
{
// TODO: Implement __destruct() method.
}
public function start($param)
{
// todo 文件名这里建议允许自定 ddcoder
$filename = $param[\'type\'] . \'-\' . date(\'YmdHis\') . \'(\' . $param[\'name\'] . \')\';
$this->doStart($param[\'title\'], $filename);
}
public function doStart($keys, $filename)
{
$this->download($filename . \'.xls\');
// php输出到缓冲区
echo \'<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> <style>td{vnd.ms-excel.numberformat:@}</style></head>\';
echo \'<table width=\"100%\" border=\"1\">\';
// 有时候需要自定义表头 ddcdoer 修改于2017-08-26
if ($keys) {
echo \'<tr><th filter=all>\' . implode(\'</th><th filter=all>\', $keys) . \"</th> </tr>\\r\\n\";
}
//刷新缓冲区
flush();
}
//下载文件
//$mimeType = \'application/force-download\'
//Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
//$mimeType = \'application/vnd.ms-excel\'
public function download($fname = \'data\', $data = null, $mimeType = \'application/force-download\')
{
if (headers_sent($file, $line)) {
echo \'Header already sent @ \' . $file . \':\' . $line;
exit();
}
//header(\'Cache-Control: no-cache;must-revalidate\');
//fix ie download bug header(\'Pragma: no-cache, no-store\');
header(\"Expires: Wed, 26 Feb 1997 08:21:57 GMT\");
if (strpos($_SERVER[\"HTTP_USER_AGENT\"], \'MSIE\')) {
$fname = urlencode($fname);
header(\'Content-type: \' . $mimeType);
} else {
header(\'Content-type: \' . $mimeType . \';charset=utf-8\');
}
header(\"Content-Disposition: attachment; filename=\\\"\" . $fname . \'\"\');
//header( \"Content-Description: File Transfer\");
if ($data) {
header(\'Content-Length: \' . strlen($data));
echo $data;
exit();
}
}
/**
* 生成并下载csv文件
*/
public function csv_export_f($keys, $expData, $fileName)
{
// export file
$csv = \'\';
foreach ($keys as $key) {
$csv .= \'\"\' . iconv(\"UTF-8\", \"gb2312\", $key) . \'\",\';
}
$csv .= \"\\n\";
foreach ($expData as $expArr) {
foreach ($expArr as $e_key => $exp) {
$csv .= iconv(\"UTF-8\", \"gbk\", $this->escapeCSV($expArr[$e_key])) . \',\';
}
$csv .= \"\\n\";
}
ob_end_clean();
$fileName .= \'.csv\';
header(\"Content-type:text/csv\");
header(\"Content-Disposition:attachment;filename=\" . iconv(\"UTF-8\", \"gb2312\", $fileName));
header(\'Cache-Control:must-revalidate,post-check=0,pre-check=0\');
header(\'Expires:0\');
header(\'Pragma:public\');
ob_end_clean();
echo $csv;
}
public function escapeCSV($str)
{
$str = str_replace(array(\',\', \'\"\', \"\\n\\r\"), array(\'\', \'\"\"\', \'\'), $str);
if ($str == \"\") {
$str = \'\"\"\';
}
return $str;
}
public function allData($rows)
{
foreach ($rows as $row) {
echo \'<tr><td>\' . implode(\'</td><td>\', $row) . \"</td></tr>\\r\\n\";
}
flush();
}
public function oneData($row)
{
echo \'<tr><td>\' . implode(\'</td><td>\', $row) . \"</td></tr>\\r\\n\";
flush();
}
public function end()
{
echo \'</table>\';
flush();
}
/**
* 多条数据flush一次 默认1000,有初始化对象决定
*/
public function multiData($row)
{
$this->rowCount++;
echo \'<tr><td>\' . implode(\'</td><td>\', $row) . \"</td></tr>\\r\\n\";
if ($this->rowCount >= $this->rowFlushCount) {
flush();
}
}
}
function actionHowToExportBigData()
{
$xlsTools = new xlsTools();
$xlsTools->start([
\'title\' => [\'列名1\', \'列名2\'],//列名
\'type\' => \'xls\', //导出的excel的类型
\'name\' => \'测试1000W导出\' //导出的excel的文件名
]
);
/* 导出1000万条示例 */
for ($i = 0; $i < 10000000; $i++) {
$row = [\'列值1\' => 1, \'列值2\' => \'x\'];
$xlsTools->multiData($row);
}
$xlsTools->end();
}
actionHowToExportBigData();
来源:https://blog.csdn.net/weixin_41715751/article/details/123187550
本站部分图文来源于网络,如有侵权请联系删除。