2017-03-16 64 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的