2017-03-16 18 views
0

私は、ユーザがExcelシートをアップロードしなければならないアップロードシステムを持っており、その情報を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'); 

問題は、日付とデータの不明な列の場所です。どのようにループし、正確なデータをデータベースに格納しますか?

+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、 'Date of Join'かどうかを確認する条件を入れ、コードを使用してください。そうでない場合は、通常のコードを使用してください。 – 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); 

(あなたがtrueに設定readDataOnlyでファイルをロードした場合、これは動作しないことに注意してください)としてフォーマットされた場合に識別するための機能を提供します。

およびUNIXにMS Excelの日付と時刻のスタンプを変換するためのtimetampsやPHPのDateTimeあなたは、私が正しく理解していれば、問題がある組み込み関数