excel操作常用類(lèi)庫(kù):PHPExcel
隐绵,PHP_XLSXWriter
威恼,用法在這里不再敘述慌核。
這里介紹幾種常用的導(dǎo)出方式(本人喜歡簡(jiǎn)單直接,還有粗暴)贴彼,__ __
xhtml方式導(dǎo)出Excel,可通過(guò)css設(shè)置背景樣式,合并單元格等操作
<?php
/**
* xhtml方式導(dǎo)出Excel,可通過(guò)css設(shè)置背景樣式,合并單元格等操作
* @param $xlsDatas
* @param $xlsTitle
* @param $xlsHeader
* @param $xlsFileName
*/
function excel_export_data($xlsDatas, $xlsTitle, $xlsHeader, $xlsFileName) {
//定義命名空間
$str = '<html xmlns:v="urn:schemas-microsoft-com:vml" ';
$str .= 'xmlns:o="urn:schemas-microsoft-com:office:office" ';
$str .= 'xmlns:x="urn:schemas-microsoft-com:office:excel" ';
$str .= 'xmlns="http://www.w3.org/TR/REC-html40">';
//header設(shè)置
$str .= '<head>';
$str .= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" > ';
$str .= '</head>';
//數(shù)據(jù)正文,可以自己設(shè)置
$str .= '<body>';
$str .= '<table border=1>' . $xlsTitle;
$str .= '<table border=1>' . $xlsHeader;
foreach ($xlsDatas as $key => $rt) {
$str .= "<tr>";
foreach ($rt as $k => $v) {
$str .= "<td>{$v}</td>";
}
$str .= '</tr>';
}
$str .= '</table></body></html>';
//文件下載
header('Content-Type: application/vnd.ms-excel; name="excel"');
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $xlsFileName);
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: no-cache');
header('Expires: 0');
exit($str);
}
$xlsDatas = [
[
'1',
'jack',
'jack@gmail.com',
'beijing',
"13812345678\t",
'61044119808080X',
"20170101-00:00:00",
],
];
$xlsTitle = "<tr style='border-style:none' ><th colspan='7'>用戶(hù)中心-VIP-1-會(huì)員信息</th ></tr>";
$xlsHeader = "<tr>
<th style = 'width:70px;' > ID</th >
<th style = 'width:70px;' > 用戶(hù)名</th >
<th style = 'width:70px;' > 郵箱</th >
<th style = 'width:70px;' > 地址</th >
<th style = 'width:70px;' > 電話(huà)</th >
<th style = 'width:70px;' > 身份證</th >
<th style = 'width:70px;' > 注冊(cè)時(shí)間</th >
</tr>";
$xlsFileName = '會(huì)員信息_' . date('YmdHis') . '.xls';
excel_export_data($xlsDatas, $xlsTitle, $xlsHeader, $xlsFileName);
有純數(shù)字不需要前面加單引號(hào)處理,直接采用制表符"\t"
至于為什么這么做,估計(jì)想了解的小伙伴,總有辦法的.
數(shù)據(jù)直接輸出到瀏覽器缘薛,不需要寫(xiě)入外部文件窍育。
<?php
/**
* 數(shù)據(jù)直接輸出到瀏覽器卡睦,不需要寫(xiě)入外部文件。
* @param $data
* @param $fileName
*/
function excel_export_data($data, $fileName) {
// 輸出Excel文件頭
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=' . $fileName);
//輸出到瀏覽器
$fp = fopen('php://output', 'a');
//Windows下使用BOM來(lái)標(biāo)記文件的編碼方式,解決UTF-8亂碼
fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF));
foreach ($data as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
}
$data = [
[
'ID',
'用戶(hù)名',
'郵箱',
'地址',
'電話(huà)',
'身份證',
'注冊(cè)時(shí)間'
],
[
'1',
'jack',
'jack@gmail.com',
'beijing',
"13812345678\t",
'61044119808080X',
"20170101-00:00:00",
],
];
$fileName = '會(huì)員信息_' . date('YmdHis') . '.csv';
excel_export_data($data, $fileName);
使用bom頭方式,解決亂碼個(gè)人感覺(jué)比utf-8 轉(zhuǎn) gbk來(lái)的直接,小伙伴怎么看?
提示:數(shù)據(jù)過(guò)多的話(huà)漱抓,可以刷新一下buffer
,我從沒(méi)用過(guò),嘻嘻~
ob_flush();
flush();
簡(jiǎn)單粗暴,直接echo(不僅僅是echo)
<?php
/**
* 設(shè)置可用內(nèi)存內(nèi)存
* @param $data
* @param $fileName
*/
function excel_export_data($data, $fileName) {
//header設(shè)置
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition:filename=' . $fileName);
//輸出指定大小數(shù)據(jù)到是保存在內(nèi)存中表锻,如果它超過(guò)設(shè)置值,則自動(dòng)寫(xiě)入臨時(shí)文件
$csv = fopen('php://temp/maxmemory:' . (100 * 1024 * 1024), 'r+');
//添加BOM來(lái)修復(fù)UTF-8亂碼
fputs($csv, $bom = (chr(0xEF) . chr(0xBB) . chr(0xBF)));
foreach ($data as $v) {
fputcsv($csv, $v);
}
rewind($csv);
exit(stream_get_contents($csv));
}
$data = [
[
'ID',
'用戶(hù)名',
'郵箱',
'地址',
'電話(huà)',
'身份證',
'注冊(cè)時(shí)間'
],
[
'1',
'jack',
'jack@gmail.com',
'beijing',
"13812345678\t",
'61044119808080X',
"20170101-00:00:00",
],
];
$fileName = '會(huì)員信息_' . date('YmdHis') . '.csv';
excel_export_data($data, $fileName);
輸出指定大小數(shù)據(jù)到內(nèi)存中乞娄,如果它超過(guò)設(shè)置值瞬逊,自動(dòng)寫(xiě)入臨時(shí)文件,原因:其實(shí)你懂得仪或。