3

初めてPHPExcelを使用しています。Excel ファイルの 1 つを読み取るための基本的なコード スニペットを作成しました。ファイルをロードし、各行を繰り返し処理し、その内容を処理したいと考えています。ただし、ファイルをロードする関数は、その内容を画面にダンプするようです。

私のコードスニペットはこれです:

      include 'lib/Classes/PHPExcel/IOFactory.php';
      $dest = "uploads/";
      $excel = "2012-12-STANDARD.xls";

      $objPHPExcel = PHPExcel_IOFactory::load($dest.$excel);

このコードを実行すると、シート内のデータが画面に 2 回エコーされます。1 つは通常のエコーのようで、2 番目は var_dump です。

画面出力のサンプル スニペットを次に示します。

DOM ELEMENT: HTML DOM ELEMENT: BODY DOM ELEMENT: P START OF PARAGRAPH: END OF PARAGRAPH: FLUSH CELL: A1 => Type ZipCode City State County AreaCode CityType CityAliasAbbreviation CityAliasName Latitude Longitude TimeZone Elevation CountyFIPS DayLightSaving PreferredLastLineKey ClassificationCode MultiCounty StateFIPS CityStateKey CityAliasCode PrimaryRecord CityMixedCase CityAliasM StateANSI CountyANSI FacilityCode CityDeliveryIndi​​cator CarrierRouteRateSortation FinanceNumber UniqueZIPName D 18540 ......

array 1 => array 'A' => string 'Type ZipCode City State County AreaCode CityType CityAliasAbbreviation CityAliasName Latitude Longitude TimeZone Elevation CountyFIPS DayLightSaving PreferredLastLineKey ClassificationCode MultiCounty StateFIPS CityStateKey CityAliasCode ........'... (length=4573)

ここで何か間違ったことをしていますか?load 関数は、アクセスする前にコンテンツをエコーするのはなぜですか?

4

3 に答える 3

3

この問題の原因は、IOFactory静的loadメソッドがファイルの形式を正しく判断できないことにあります。ドキュメントによると、

コードに簡単に実装でき、ファイルの種類を気にする必要はありません。これは、ファイルをロードする最も効率的な方法ではありません。また、実際にファイルを PHPExcel オブジェクトに読み込む前にローダーを構成する柔軟性がありません。

ファイルを正常にロードReaderするには、フォーマットを明示的に指定して をインスタンス化できます。Excel 2007 形式のファイルの場合、次のようになります。

$xl_reader = PHPExcel_IOFactory::createReader('Excel2007');
$xl = $xl_reader->load("/tmp/yourfile.xls");

リーダーのcanRead()メソッドを使用して、作成したリーダーが指定したファイルをロードできるかどうかを判断することもできます。

$xl_reader = PHPExcel_IOFactory::createReader('Excel2007');
if ($xl_reader->canRead('/tmp/yourfile.xls')) {
    echo "It's a success! Loading the file..."; 
    $xl = $xl_reader->load('/tmp/yourfile.xls');
    ...
} else {
    echo "Cannot read the file.";
    ...
}
于 2013-01-17T07:08:28.183 に答える
1

そのコードは、コードに私の診断の一部がまだ残っているHTMLリーダーで検出されています(測定値)...ファイルClasses/PHPExcel/Reader/HTML.phpを編集し、エコーを含むすべての行をコメントアウトするとまたは var_dump ステートメントを使用すると、問題が解消されるはずです。

たまたま、昨夜私が実際に取り組んでいたものです。

次に、適切にフォーマットされた BIFF ファイルではなく、.xls の拡張子を持ち、html マークアップを含むファイルではなく、将来的に適切な .xls ファイルを提供するようにファイルを提供した人に依頼することもできます。

于 2013-01-17T07:25:12.330 に答える
0

PHPExcel を PHP インクルード パスに追加してみてください。

  set_include_path(get_include_path().PATH_SEPARATOR.'lib/Classes/PHPExcel');
  include 'lib/Classes/PHPExcel/IOFactory.php';
  $dest = "uploads/";
  $excel = "2012-12-STANDARD.xls";

  $objPHPExcel = PHPExcel_IOFactory::load($dest.$excel);
于 2013-01-17T01:10:41.150 に答える