2011-12-24 16 views
4

これは私の最初の質問です。 PHPExcelを使用して、.xlsxファイルからHTMLテーブルを作成しようとしています。あなたは私のプロジェクトを見つけることができます: http://rahulr92.x10.mx/excel/index.php ユーザー名 'admin'でログインして、 'テーブルの表示'オプションを見つけることができます。このページには、以前にアップロードされた.xlsxファイルの表が表示されます。私はPHPExcelを初めて使い、オンラインで見つけたいくつかの標準コードを使用しました。ここにあります:PHPExcelを使用して日付、時刻、および数値を正しく表示できません

<?php 
require_once '/Classes/PHPExcel.php'; 
$objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
$objReader->setReadDataOnly(true); 
$objPHPExcel = $objReader->load("..\excel.xlsx"); 
$objWorksheet = $objPHPExcel->getActiveSheet(); 
$highestRow = $objWorksheet->getHighestRow(); 
$highestColumn = $objWorksheet->getHighestColumn(); 
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 
$user=strtolower($_GET['user']); 
$r_count=0; 
echo '<table border="1">' . "\n"; 
for ($row = 5; $row <= $highestRow; ++$row) { 
if ($row <7 || $user=="admin" || strstr(strtolower($objWorksheet->getCellByColumnAndRow(8, $row)->getValue()),$user)) 
{ 
if($row>7)$r_count++; 
for ($col = 0; $col <= $highestColumnIndex; ++$col) { 
     if(PHPExcel_Shared_Date::isDateTime($objWorksheet->getCellByColumnAndRow($col,$row))) 
     echo '<td>' . date("d M Y",PHPExcel_Shared_Date::ExcelToPHP($objWorksheet->getCellByColumnAndRow($col, $row))) . '</td>' ; 
     else 
     echo '<td>' . $objWorksheet->getCellByColumnAndRow($col, $row)->getValue() . '</td>' . "\n"; 
    } 
    echo '</tr>' . "\n"; 
} 
} 
echo '</table>' . "\n"; 
echo "No. of Entries: ".$r_count; 
?> 

残念ですが最適なコードです。私はPHPファイルを実行すると、私はテーブルを取得し、その中のすべての文字列が適切に表示されますが、日時と数字のフィールドは、一見無作為のばかばかしいでいっぱいです。上記のリンクからご覧ください。私はいくつかの調査を行い、その方法でisDateTime()関数について知っています。しかし、それは動作していないか、おそらく誤って使用されています。私はこのプロジェクトの締め切りが迫っているので、誰かが私を正しい方向に向けることができれば素晴らしいだろう。答えが非常に明白だったら本当に申し訳ありません。ありがとうございます。 Rahul

答えて

4

日付/時刻の値を識別できるようにする場合は、$objReader->setReadDataOnly(true);を設定しないでください。Excelは日付/時刻を浮動小数点数として格納します。日付/時刻から数値を区別する唯一の方法はフォーマットマスキングを使用する場合:isDateTime()は、そのフォーマットマスキングを使用して、値が数値か日時かを識別します。$objReader->setReadDataOnly(true)は、データ(数値)のみを読み取り、フォーマットマスクを無視するようにファイルリーダーに指示します。生データ。

しかし、「ランダムなばかげた」とはどういう意味なのか分かりません...数字は数字として表示されるはずです...例を挙げてください。

EDITそれらがブックにマスク形式であるようなgetFormattedValue()などの細胞方法は番号が返されるので、日付/時刻値は日付/時刻としてフォーマットされること

注、数字は、該当する番号で表示されます(Excelファイルで適切な書式設定がされていれば)小数点以下1000桁区切りまたは通貨またはパーセントのため、$objReader->setReadDataOnly(true)がリーダーに設定されていない限り、isDateTime() ....のテストは必要ありません。

+0

返信いただきありがとうございます。ここでは、 "ランダムなばかげた"という意味の例を見ることができます:http://rahulr92.x10.mx/excel/view.php?user=admin – rahulr92

+0

私は$ objReader-> setReadDataOnly(true)ステートメントをコメントしようとしました。 「致命的なエラー:C:\ wamp \ www \ SN_project391 \ Classes \ PHPExcel \ Cell.phpの行で、134217728バイトのメモリサイズが使い果たされました(32バイトを割り当てようとしました) Call Stack' 。どうすれば修正できますか? – rahulr92

+0

私はこの問題に対する以前の答えをいくつか見つけました。それらのエラーを修正しようとします。私は結果に戻ってきます。 – rahulr92

関連する問題