上次使用phpMyAdmin將Excel的資料轉到mysql,但使用上,手動的部分還很多,如果一次要轉大量檔案,還是很麻煩。包括必須在 mysql建立一個對應到excel的table,必須逐一輸入欄位名稱。 在網頁輸出後還要複製到文字檔,最後再利用phpMyAdmin匯入。
我改寫 phpExcelReader ,使mysql的表格能自動建立,資料能自動轉入,不必再用到phpMyAdmin。您唯一要做的事就是指定好要轉入的excel檔,其他一切就會自動完成了。
必須注意的是:
1. mysql的資料庫必須自己建立,權限及帳號密碼要自行設定(要有drop 及 create table的權限)。
2. 資料庫及網頁輸入使用utf-8編碼,但excel的檔名是big5碼,所以必須先轉成big5碼再讀檔。
$file_big5 = mb_convert_encoding($file1, 'BIG5', 'UTF-8');
$data->read($file_big5);
3. excel表格的第一行將成為mysql的table的欄位名稱。excel的檔名將成為mysql的表格(table)名稱。如果格式不符就轉不進來了。
4. 所有欄位均是text格式。
先下載 phpExcelReader ,置換壓縮檔中的 example.php及excel\reader.php。
程式如下:
example.php
if (!empty($_POST["file1"])){
doProcess($_POST["file1"],$_POST['tb1']);
}
?>
// Test CVS
function doProcess($file1){
require_once 'Excel/reader.php';
$mysqli = new mysqli("localhost", "root", "xxxxxxxx","db1") or die($mysqli->error);
// ExcelFile($filename, $encoding);
$data = new Spreadsheet_Excel_Reader();
// Set output Encoding.
$data->setOutputEncoding('utf-8');
/***
* if you want you can change 'iconv' to mb_convert_encoding:
* $data->setUTFEncoder('mb');
*
**/
/***
* By default rows & cols indeces start with 1
* For change initial index use:
* $data->setRowColOffset(0);
*
**/
/***
* Some function for formatting output.
* $data->setDefaultFormat('%.2f');
* setDefaultFormat - set format for columns with unknown formatting
*
* $data->setColumnFormat(4, '%.3f');
* setColumnFormat - set format for column (apply only to number fields)
*
**/
$file_big5 = mb_convert_encoding($file1, 'BIG5', 'UTF-8');
$data->read($file_big5);
/*
$data->sheets[0]['numRows'] - count rows
$data->sheets[0]['numCols'] - count columns
$data->sheets[0]['cells'][$i][$j] - data from $i-row $j-column
$data->sheets[0]['cellsInfo'][$i][$j] - extended info about cell
$data->sheets[0]['cellsInfo'][$i][$j]['type'] = "date" | "number" | "unknown"
if 'type' == "unknown" - use 'raw' value, because cell contain value with format '0.00';
$data->sheets[0]['cellsInfo'][$i][$j]['raw'] = value if cell without format
$data->sheets[0]['cellsInfo'][$i][$j]['colspan']
$data->sheets[0]['cellsInfo'][$i][$j]['rowspan']
*/
error_reporting(E_ALL ^ E_NOTICE);
$pos=mb_strrpos($file1,"\\");
$pos2=mb_strrpos($file1,".");
$len=mb_strlen($file1);
$fileName=mb_substr($file1,$pos+1,($pos2-$pos-1));
for ($j = 1; $j sheets[0]['numCols']; $j++) {
$a=trim($data->sheets[0]['cells'][1][$j]);
if (empty($a))
$fields="field".$j;
else
$fields= $data->sheets[0]['cells'][1][$j];
$fields.=" text";
if($j sheets[0]['numCols'])
$fields.=",";
$fs.=$fields;
}
$mysqli->query("SET NAMES 'utf8'");
$q="DROP TABLE IF EXISTS ".$fileName;
$mysqli->query($q) or die($mysqli->error);
$q="create table ".$fileName."(".$fs.")";
$mysqli->query($q) or die($mysqli->error);
for ($i = 1; $i sheets[0]['numRows']; $i++) {
$q="insert ".$fileName." values(";
for ($j = 1; $j sheets[0]['numCols']; $j++) {
$q.="\"".addslashes($data->sheets[0]['cells'][$i][$j]);
if($j sheets[0]['numCols'])
$q.="\",";
else
$q.="\"";
}
$q.=")";
// echo $q;
$mysqli->query($q) or die($mysqli->error);
}
}
?>
http://save-coco.blogspot.com/2010/12/excelmysqlphpmyadminphpexcelreader_24.html
留言列表