3

Mysqlに挿入する前に、最初にxlsxファイルから配列を生成したいので、これで十分なのでphpexcelを使用しています(すべてのWebサイトのレビューで知っています)。しかし、xlsx で定義されたシートから配列を作成しようとすると問題が発生します。これが私のスクリプトです。

<?php

error_reporting(E_ALL);
set_time_limit(0);

date_default_timezone_set('Europe/London');

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>Automatic Importer</title>

</head>
<body>

<h1>PHPExcel Reader Example #07</h1>
<h2>Simple File Reader Loading a Single Named WorkSheet</h2>
<?php

/** PHPExcel_IOFactory */
include 'Classes/PHPExcel/IOFactory.php';


//$inputFileType = 'Excel5';
    $inputFileType = 'Excel2007';
//  $inputFileType = 'Excel2003XML';
//  $inputFileType = 'OOCalc';
//  $inputFileType = 'Gnumeric';
$inputFileName = 'file.xlsx';
$sheetname = 'My Sheet 4';

echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
echo 'Loading Sheet "',$sheetname,'" only<br />';
$objReader->setLoadSheetsOnly($sheetname);
$objPHPExcel = $objReader->load($inputFileName);


echo '<hr />';

echo $objPHPExcel->getSheetCount(),' worksheet',(($objPHPExcel->getSheetCount() == 1) ? '' : 's'),' loaded<br /><br />';
$loadedSheetNames = $objPHPExcel->getSheetNames();
$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
var_dump($sheetData);


?>
<body>
</html>

これはエラーです:

Fatal error: Call to a member function cellExists() on a non-object in C:\xampp\htdocs\chi\import\Classes\PHPExcel\Calculation.php on line 3241

誰かがエラーがどこにあるのか教えてもらえますか? 私のOOPは良くありません、ありがとう

4

2 に答える 2

1

ワークシート内のすべての数式を評価するようにメソッドに指示する TRUE として 3 番目の引数を指定して toArray() を呼び出すと、PHPExcel の評価で問題が発生するスプレッドシートの数式の 1 つに問題があります。昨夜、存在しないセルへの参照を含む名前付き範囲が数式で使用されているという修正を追加しました...このメッセージをトリガーするバグです。ただし、この場合 (その特定の行番号にエラーがある場合)、存在しないワークシートを参照する数式のように見えます。単一の名前付きワークシートのみをロードしているという事実により、これが非常に可能になります。

可能であれば、各セルで getCalculatedValue() を使用して「スプレッドシートをたどる」ことができますか? そして、その式が何であるかを見てください。

または、1 つの個別のワークシートではなく、ワークブック全体を読み込んで、それでもエラーが発生するかどうかを確認します。

このエラーを防ぐために、計算エンジン コードにパッチを適用する方法を検討します。ただし、数式が参照するシートにアクセスできない場合、数式を正しく評価できないことを意味します。

于 2012-10-31T07:31:58.023 に答える
0

Xdebugを設定することから始めることができます。これにより、エラーの発生元がより明確になります。このコードから、何らかのエラーが原因でxlsxファイルが読み取られないか、読み取られるはずのシートに問題があると推測できます。

于 2012-10-31T04:03:33.780 に答える