3

我想先从我的 xlsx 文件生成一个数组,然后再将其插入 Mysql,所以我使用 phpexcel,因为这个已经足够好了(我从每个网站的评论中都知道)。但是当我尝试从 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

问题在于 PHPExcel 在评估时遇到问题的电子表格公式之一,当您调用 toArray() 时,第三个参数为 TRUE,告诉该方法评估工作表中的所有公式。昨晚我确实添加了一个修复程序,其中在公式中使用了一个包含对不存在单元格的引用的命名范围......一个会触发此消息的错误;但在这种情况下(在该特定行号处有错误),它看起来好像是一个引用不存在的工作表的公式。您只加载一个命名工作表的事实使这很可能。

如果可能,您能否“遍历电子表格”,在每个单元格上使用 getCalculatedValue() 来查找哪个单元格包含触发错误的公式;然后看看那个公式是什么?

或者,加载整个工作簿而不仅仅是一个单独的工作表,然后查看错误是否仍然存在。

我将研究修补计算引擎代码以防止此错误;但这确实意味着如果公式引用的工作表不可访问,则无法正确评估该公式。

于 2012-10-31T07:31:58.023 回答
0

您可以从设置 Xdebug 开始,这样可以更清楚地了解错误的来源。从这段代码中,我可以假设,由于某些错误或应该读取的工作表存在问题,xlsx 文件没有被读取。

于 2012-10-31T04:03:33.780 回答