將 MySQL 查詢結果導出 Excel 並進行後續分析是數據運營的高頻需求。本文梳理從導出、編碼處理到 Excel 進階函數計算的完整鏈路。
CONCAT('\'', field),防止 Excel 自動科學計數法或截斷。| 需求 | 公式示例 | 說明 |
|---|---|---|
| 統計特定值出現次數 | =COUNTIF(A:A,"測試") | 統計 A 列「測試」出現次數 |
| 身份證推算性別 | =IF(MOD(MID(A1,IF(LEN(A1)=15,15,17),1),2)=1,"男","女") | 15/18 位身份證通用,倒數第二位奇男偶女 |
| 身份證推算年齡 | =DATEDIF(TEXT(MID(A1,7,LEN(A1)/2-1),"0-00-00"),TODAY(),"Y") | 提取出生日期並計算周歲 |
| 年齡段分組統計 | =IF(C1>50,"50以上",IF(C1>=40,"40-50",...)) | 嵌套 IF 實現自定義分桶 |
| 批量填充公式 | 選中首儲存格 → Ctrl+雙擊右下角「+」 | 自動向下填充至數據末行 |
mysqldump -u root -p db_name table_name > data.sql
再用工具(如 MySQL Workbench、Navicat)匯入並導出 Excel。
SELECT * INTO OUTFILE '/tmp/data.xls' FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\n' FROM table_name;
注意:需 FILE 權限,輸出目錄需 MySQL 進程寫權限,且文件不能預存在。
# PHP 示例:設置 Header 強制下載
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=export.xls");
header("Pragma: no-cache");
echo "姓名\t年齡\t時間\n";
while($row = $stmt->fetch()) {
echo "{$row['name']}\t{$row['age']}\t{$row['time']}\n";
}
優點:靈活控制格式、編碼、樣式;可結合 PhpSpreadsheet 生成真正 .xlsx,支持公式、樣式、多工作表。
iconv -f utf8 -t gb2312 -o out.xls in.xls;若報錯 illegal input sequence,先用文本編輯器另存為 ANSI 編碼。mb_convert_encoding 轉 GBK,或生成 UTF-8 BOM 的 CSV,Excel 可直接識別。SELECT * INTO OUTFILE 產生巨大文件,分批導出或用流式處理。