PHPExcel函数getHighestRow()不适用于.xls,但适用于.xlsx

PHPExcel函数getHighestRow()不适用于.xls,但适用于.xlsx,php,phpexcel,Php,Phpexcel,我正在使用PHPExcel根据当前行数读取其内容 要查找行数,我使用以下函数 $objSheet->getHighestRow(); 对于.xlsx文件,它工作正常 但它不是在.xls中工作 致命错误:对非对象调用成员函数getHighestRow() 那么我如何获得excel的行数呢 PHP代码: set_include_path(get_include_path() . PATH_SEPARATOR . 'Classes/'); /** PHPExcel_IOFact

我正在使用PHPExcel根据当前行数读取其内容

要查找行数,我使用以下函数

$objSheet->getHighestRow();
对于.xlsx文件,它工作正常

但它不是在.xls中工作

致命错误:对非对象调用成员函数getHighestRow()

那么我如何获得excel的行数呢

PHP代码:

    set_include_path(get_include_path() . PATH_SEPARATOR . 'Classes/');
    /** PHPExcel_IOFactory */
    include 'www/PHPExcelReader/Classes/PHPExcel/IOFactory.php';
    include 'www/PHPExcelReader/Classes/PHPExcel/Classes/PHPExcel.php';
    try {
        $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_sqlite3;
        PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
        $objReader = new PHPExcel_Reader_Excel2007();
        $objReader->setReadDataOnly(true);
        $objReader->setLoadSheetsOnly( array("Sheet1") );
        $objPHPExcel = $objReader->load($inputFileName);
        $objSheet = $objPHPExcel->getActiveSheet();
        $no_of_rows=$objSheet->getHighestRow();
        //echo "no_of_rows=$no_of_rows";

我希望xls和.xlsx都得到支持。。。请引导我。

我自己解决了这个问题。 这是由于excel版本不兼容造成的

以下是解决此问题的代码

/**  Identify the type of $inputFileName  **/
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
/**  Create a new Reader of the type that has been identified  **/
$objReader = PHPExcel_IOFactory::createReader($inputFileType);

PHPExcel getHighestRow()方法不应该关心单元格是否受到保护!如果是这样,那么它就是PHPExcel代码中的一个主要缺陷,需要修复而不是解决。由于我打算在本周末发布一个新版本,您能否在上对此提出一个问题,提供一个演示此问题的示例电子表格文件,以便我可以查看修复方法it@MarkBaker:我也用错误日志更新了问题。。请看一看<代码>致命错误:对非对象调用成员函数getHighestRow()这是使用Excel2007 Reader、Excel5 Reader还是任何阅读器?@MarkBaker:我更新了问题。这是由于xls文件类型造成的。请提出一个解决方案。@MarkBaker:它使用的是Excel2007,但我可以上载xls和xlsx文件。是的,这就是为什么PHPExcel有不同格式的读卡器,以及为什么
PHPExcel\u IOFactory
类提供了一个
identify()
方法来确定任何给定文件都应该使用哪个读卡器,以及一个通用的
load()
方法,该方法将确定格式并加载,而无需识别it@MarkBaker:您能提供load()的语法吗?
load()
的代码可以在库的源代码中找到,如果您愿意,您可以查看它的工作原理;还有一个完整的文档,详细说明了在/Documentation文件夹或在线上读取电子表格数据的所有选项。依靠文件扩展名来确定要使用的阅读器也不是一个好主意,因为很多人给csv或html标记文件扩展名为.xls或.xlsx。。。。identify()方法根据文件的实际内容进行测试,而不是简单地依赖于正在使用的文件扩展名correct@MarkBaker:我已经更新了我的答案。它现在运转良好。谢谢:)