PHPExcel将Excel内容转储到屏幕上

PHPExcel将Excel内容转储到屏幕上,php,phpexcel,Php,Phpexcel,我第一次使用PHPExcel。我只是写了一个基本的代码片段来读取我的一个Excel文件。我想加载文件,遍历每一行并处理其内容。但是,加载文件的函数似乎将其内容转储到屏幕上 我的代码片段如下: include 'lib/Classes/PHPExcel/IOFactory.php'; $dest = "uploads/"; $excel = "2012-12-STANDARD.xls"; $objPHPExcel = PHPExcel_IOFact

我第一次使用PHPExcel。我只是写了一个基本的代码片段来读取我的一个Excel文件。我想加载文件,遍历每一行并处理其内容。但是,加载文件的函数似乎将其内容转储到屏幕上

我的代码片段如下:

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

      $objPHPExcel = PHPExcel_IOFactory::load($dest.$excel);
运行此代码时,工作表中的数据已在屏幕上回显两次。首先,像一个常规的回声,第二个是一个var_转储

以下是屏幕输出的示例片段:

DOM元素:HTML DOM元素:BODY DOM元素:p的开始 段落:段落末尾:刷新单元格:A1=>类型ZipCode City 州县区号CityType CityAlias缩写CityAliasName 经纬度时区高程CountyFIPS日光节约 PreferredLastLineKey分类代码多国家状态FIPS CityStateKey CityAlasCode PrimaryRecord CityMixedCase 城市混合案例州国家设施代码 城市配送指示卡运营商零售分拣财务编号 UniqueZIPName D 18540

数组1=> 排列 'A'=>string'类型ZipCode市州县区号CityType cityalias缩写CityAliasName纬度经度时区 高程CountyPips日光保存首选LastLineKey 分类代码多州FIPS CityStateKey CityAliasCode。。。(长度=4573)


我做错什么了吗?为什么加载函数在访问内容之前会回显内容

尝试将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);

问题的原因是
IOFactory
static
load
方法无法正确确定文件的格式。毕竟,您可能不想使用它,因为根据文档:

虽然很容易在代码中实现,但您无需担心 关于文件类型这不是加载文件的最有效方法 文件而且它缺乏以任何方式配置加载程序的灵活性 在将文件实际读入PHPExcel对象之前

要成功加载文件,可以实例化一个显式指定格式的
读取器。对于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.";
    ...
}

这段代码正在HTML阅读器上运行,它仍然包含我的一些诊断代码(这是罪过)。。。如果编辑文件class/PHPExcel/Reader/HTML.php并注释掉包含echo或var_dump语句的每一行,那么应该可以消除问题

巧合的是,这是我昨晚正在做的事情


然后,您还可以要求提供该文件的人在将来为您提供一个适当的.xls文件,而不是扩展名为.xls但包含html标记而不是格式正确的BIFF文件。

::load()应返回一个reader对象,而不是输出内容。这可能是PHP错误转储的一部分吗?可能。我确实尝试过用try..catch封装负载,但没有抛出任何异常。错误报告处于打开状态。请不要忘记PHPExcel_IOFactory中的identify()方法,该方法读取文件的格式,以确定应使用哪个读取器(特别适用于不是它们声称的文件,例如OP的文件,它是HTML声称为.xls文件)。它与load()通过工厂标识文件的效率开销相同,但允许您为可能需要的任何其他配置实例化正确的编写器apply@peterm-+1'ed。这也有帮助。你是对的。回声评论道,一切正常。我的Excel文件确实有问题,但目前我不得不接受它,因为它来自第三方。将不得不深入挖掘HTML阅读器。任何关于HTML阅读器的帮助都是有价值的。愿意测试昨晚使用的任何代码;-)它位于phpexcelgithub存储库的HTMLReader分支中,昨晚我添加了对colspan的支持。。。目前正致力于支持RowSpandown投票支持这个答案——他的问题与包括PHPExcel无关