上次使用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 <= $data->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 < $data->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 <= $data->sheets[0]['numRows']; $i++) {
$q="insert ".$fileName." values(";
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
$q.="\"".addslashes($data->sheets[0]['cells'][$i][$j]);
if($j < $data->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
創作者介紹

佳佳的窩

天秤女~佳佳 發表在 痞客邦 PIXNET 留言(0) 人氣()