1. 程式人生 > >excel匯入mysql(用PHP-ExcelReader 方法),日期時間出錯的處理辦法

excel匯入mysql(用PHP-ExcelReader 方法),日期時間出錯的處理辦法

ExcelReader是個簡單易用的東東,相信很多使用PHP的同學們需要從EXCEL中匯入資料到資料庫時,十有八九都會使用它,因為他實在是簡單易用。

PHP-ExcelReader

匯入程式碼:

< ?php
require_once 'reader.php';
// ExcelFile($filename, $encoding);
$data = new Spreadsheet_Excel_Reader();
// Set output Encoding.
$data->setOutputEncoding('gbk');
//”data.xls”是指要匯入到mysql中的excel檔案
$data->read('data.xls');
@ $db = mysql_connect('localhost', 'root', '123456') or
die("Could not connect to database.");//連線資料庫
mysql_query("set names 'gbk'");//輸出中文
mysql_select_db('mydb'); //選擇資料庫
error_reporting(E_ALL ^ E_NOTICE);
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
//以下注釋的for迴圈列印excel表資料

//以下程式碼是將excel表資料【3個欄位】插入到mysql中,
根據你的excel表字段的多少,改寫以下程式碼吧!
$sql = "INSERT INTO test VALUES('".
$data->sheets[0]['cells'][$i][1]."','".
$data->sheets[0]['cells'][$i][2]."','".
$data->sheets[0]['cells'][$i][3]."')";
echo $sql.'< br />';
$res = mysql_query($sql);
}
?>

注意1:

修改檔案的字尾

拿到下載包中的oleread.inc 、 reader.php這兩個檔案,其他的檔案是申明和應用例項!

開啟reader.php檔案,在31行閣下

//require_once ""PEAR.php"";
require_once ""Spreadsheet/Excel/Reader/OLERead.php"";
//require_once ""OLE.php"";

批改為

//require_once ""PEAR.php"";
require_once ""oleread.inc"";
//require_once""OLE.php"";

注意2:

轉換日期格式為:Y-m-d,但是天數還是多一天,小時也多了8個小時

從EXCEL中匯入日期型別的欄位的時候,問題就來了,首先是時區的問題,還有格式的問題。從EXCEL中讀出的都是“d/m/Y”的格式,MYSQL中我一般都用“Y-m-d”的格式。

把:

var $dateFormats = array (
0xe => "d/m/Y",
0xf => "d-M-Y",
0x10 => "d-M",
0x11 => "M-Y",
0x12 => "h:i a",
0x13 => "h:i:s a",
0x14 => "H:i",
0x15 => "H:i:s",
0x16 => "d/m/Y H:i",
0x2d => "i:s",
0x2e => "H:i:s",
0x2f => "i:s.S")

改成:

var $dateFormats = array (
0xe => "Y-m-d",
0xf => "Y-M-d",
0x10 => "M-d",
0x11 => "Y-M",
0x12 => "h:i a",
0x13 => "h:i:s a",
0x14 => "H:i",
0x15 => "H:i:s",
0x16 => "Y-m-d H:i",
0x2d => "i:s",
0x2e => "H:i:s",
0x2f => "i:s.S");

注意3:

修改天數,但是小時還是多8小時

$utcValue = round(($utcDays+1) * SPREADSHEET_EXCEL_READER_MSINADAY);

修改成

$utcValue = round(($utcDays+0) * SPREADSHEET_EXCEL_READER_MSINADAY);

$utcValue = round(($utcDays-(1/3))* SPREADSHEET_EXCEL_READER_MSINADAY);
樓主的問題處理的非常好,還有那個8小時,改成這樣就可以了。