資料匯入匯出是企業級應用常見需求。本文提供兩種方案:使用 Spreadsheet_Excel_Reader 讀取 .xls 匯入資料庫,以及利用 HTTP Header 直接輸出 Excel 格式實現資料導出,無需額外擴充套件。
需下載 Spreadsheet_Excel_Reader 類庫(支援 .xls 格式),核心步驟:
<?php
function import_to_DB($filename) {
require_once 'reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('utf-8');
$data->read("data/Excel/{$filename}.xls");
$db = mysql_connect('localhost', '用戶名', '密碼') or die("資料庫連線失敗");
mysql_query("SET NAMES 'utf8'");
mysql_select_db('資料庫名');
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
// 取得第 i 行,第 N 欄的值
$cellValue = $data->sheets[0]['cells'][$i][欄位數];
// 執行 INSERT 語句
// $sql = "INSERT INTO 表名 VALUES (...)";
// mysql_query($sql);
}
}
?>
關鍵點: $data->sheets[0]['cells'][行][欄] 為核心存取方式,行從 1 開始,欄從 1 開始。
利用 Content-Type: application/vnd.ms-excel 標頭,瀏覽器會自動下載為 .xls 檔案:
<?php
header('Content-Type: text/html; charset=utf-8');
header("Content-Type: application/vnd.ms-excel; charset=UTF-8");
header("Content-Disposition: filename=匯出資料.xls");
$conn = mysql_connect("localhost", "root", "密碼") or die("連線失敗");
mysql_select_db("資料庫名", $conn);
mysql_query("SET NAMES 'UTF-8'");
$sql = "SELECT * FROM 表名 WHERE 條件";
$result = mysql_query($sql);
// 輸出表頭(用 \t 分欄,\n 換行)
echo "欄位1\t欄位2\t欄位3\n";
while($row = mysql_fetch_array($result)) {
echo $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
}
?>
ob_start() 緩衝輸出,避免記憶體溢位。mysql_* 函數已棄用,實際專案請改用 PDO 或 mysqli。