2017-03-16 3 views
0

나는 사용자가 엑셀 시트를 업로드해야하는 업로드 시스템을 가지고 있으며 MySQL 데이터베이스에 정보를 저장해야한다. 이 파일은 사용자가 업로드해야하며 여기에는 고정 된 구조가 없다는 문제가 있습니다.mysql에 phpexcel 데이터

그들 중 일부가 같이 필요에 따라 몇 가지 추가 세부 사항 헤더를 가진 업로드 :

이름 | 아버지 이름 | 가입 날짜 | 주소 | 전화

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

이름 | 아버지 이름 | 전화 | 가입 날짜 | 주소

여기서는 Excel에서 데이터를 추출하기 위해 PHPExcel lib를 사용하고 있습니다. 올바르게 파싱되지 않은 날짜에 올 때 제대로 작동하고 있으며 형식 지정을 위해 열을 순환시키는 방법을 잘 알고 있습니다. 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

만약 내가 제대로 이해하고, 문제는 내장 함수에 PHP 년대를 사용 할 수

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

객체 다른 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

루핑하는 동안 전화 번호도 유효합니다. – 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_을 제대로 구문 분석하지 못하기 때문에 많은 데이터베이스 테이블을 파일로 저장하므로 전화 번호에 영향을 미치는 코드를 사용할 때 특정 테이블에 삽입하고 삽입 할 필요가 없습니다. – bhrmalik

+0

OK, 나는 아직도 내가 너를 이해하는지 모르겠다. 다시 시도하자. 열의 순서가 무엇인지 모르기 때문에 전화 번호가 날짜로 처리된다. 그게 다야? – alanlittle

0

PHPExcel은 셀이 날짜로 포맷 여부를

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

가 (당신이 readDataOnly 사용하여 파일을로드 한 경우이 작동하지 않습니다 true로 설정) 경우 식별하기위한 기능을 제공합니다.

및 UNIX에 MS 엑셀 날짜 시간 스탬프를 변환

는 timetamps 또는 PHP 날짜 시간은 다음 조작하거나 형식