2017-03-16 39 views
0

我有一個上傳系統,用戶必須上傳他們的Excel工作表,我必須將信息存儲到MySQL數據庫。該文件必須由用戶上傳,在這裏我有一個問題,那裏沒有固定的結構。phpexcel數據到mysql

他們中有些人將其上傳的頭,並用按需要進行一些額外的細節:

名稱|父親姓名|加入日期|地址| Phone

-------------------------- +++ ---------------- ------

名稱|父親姓名|電話|加入日期|地址

這裏我使用PHPExcel lib從Excel中提取數據,工作正常,到達日期時它不能正確解析,我如何在各列之間循環以進行格式設置。 因爲我使用這種方法,因爲它在stackoverflow中建議,它是格式化,但對於電話號碼,它也是應用更改數據。

$excelDate = $cell->getValue(); // gives you a number like 44444, which is days since 1900 
$stringDate = \PHPExcel_Style_NumberFormat::toFormattedString($excelDate, 'DD-MM-YYYY'); 

問題是日期和數據的列位置未知,如何在MySQL中循環和存儲數據庫中的確切數據。

+0

如果我理解正確的,問題是在不同的Excel文件中列的順序可能不同。那是對的嗎? – alanlittle

+0

究竟@alanlittle – bhrmalik

+0

你有沒有考慮'$ cell-> getFormattedValue();' –

回答

0

試試這個:

$baseDate = strtotime('1900-01-01'); 
$excelDate = $cell->getValue(); // gives you a number like 44444, which is days since 1900 
$date = strtotime("+$excelDate day", $baseDate); //Adds the number of days to the base date 
$stringDate = \PHPExcel_Style_NumberFormat::toFormattedString($date, 'DD-MM-YYYY'); 
+0

while循環它也影響電話號碼。 – bhrmalik

+0

@bhrmalik,提出一個條件,看看它是否'加入日期',使用我的代碼,否則,使用常規代碼 – Mojtaba

+0

您是否知道PHPExcel爲此提供功能 –

0

如果文件總是有列標題,使用數組來對其進行匹配的列號,這樣的事情:

// Read the header row into an array 
$excel1 = ['Name', 'Father Name', 'Phone', 'Date of Join', 'Address']; 
$colnbr = 1; 
foreach ($excel1 as $colname) { 
    $columns[$colnbr++] = $colname; 
} 
// Process the rest of file 1 

// Read the header row into an array 
$excel2 = ['Name', 'Father Name', 'Date of Join', 'Address', 'Phone']; 
$colnbr = 1; 
foreach ($excel2 as $colname) { 
    $columns[$colnbr++] = $colname; 
} 
// Process the rest of file 2 

然後,當你處理文件的其餘部分,用它來匹配你正在處理的列和它們各自的數據庫字段。

+0

感謝您的早日回覆,它沒有像許多數據庫表一樣正確地解析phpexcel_許多excel文件,所以他們不需要匹配它們並插入特定的表中,當我使用代碼時它也影響了電話號碼。 – bhrmalik

+0

好吧,我想我仍然不確定我是否理解你,讓我再試一次:你不知道列將以什麼順序出現,因此電話號碼被作爲日期處理。是嗎? – alanlittle

0

PHPExcel識別,如果單元格被格式化爲日期或不

$isdate = PHPExcel_Shared_Date::isDateTime($cell); 

(注意,如果你已經裝載了readDataOnly文件,這將不起作用設置爲true)提供的功能。

和轉換MS Excel的日期時間郵票UNIX timetamps或PHP datetime對象

$unixTimestamp = PHPExcel_Shared_Date::ExcelToPHP($cell->getValue()); 
$phpDateTimeObject = PHPExcel_Shared_Date::ExcelToPHPObject($cell->getValue()); 

然後你就可以操縱或使用內置函數格式PHP的