PHP无法通过COM打开Excel工作簿

此代码正常工作,直到到达打开的工作簿行,然后失败。

<?PHP $file = "C:\\xampp\\htdocs\\php\\test.xls"; openWorkbook($file); function openWorkbook($file) { $excel = new COM("Excel.Application") or die ("ERROR: Unable to instantaniate COM!\r\n"); echo "Application name: {$excel->Application->value}\r\n"; echo "Loaded version: {$excel->Application->version}\r\n"; // FAILS ON THIS LINE! $Workbook = $excel->Workbooks->Open($file) or die("ERROR: Unable to open " . $file . "!\r\n"); } 

有没有人有任何build议,为什么这可能会发生? 我已经看了很多其他的post,但没有人似乎有这个具体问题。

我将假设你为什么需要使用COM而不是像PHPExcel这样的第三方库有一些原因。 如果没有具体的原因,考虑切换到这些经过尝试,testing和更好支持的替代品。


你的代码似乎是正确的,我只能想象你有某种权限问题。

通过COM在PHP中从MSO应用程序中提取明智的错误消息可能非常困难,所以可以尝试以下几个方面:

  • 例如,validation文件扩展名( .xls )是否与文件中的数据相匹配 – 确保没有错误的文件扩展名的CSV文件。 Excel(即使通过COM访问)应该能够处理这个问题,但是如果您在Excel应用程序中打开该文件,则会引发警告。
  • 在Excel中打开文件,input一个空单元格,删除你刚input的内容,然后保存。 这将导致Excel重新编码并将整个文件写回到磁盘,这也可能有助于解决任何损坏的文件问题。
  • 确保文件具有适当的权限。 最好的办法是将文件设置为“Everyone”组的完整权限,如果这样可以修复问题,则可以将权限调整为所需的限制。

这是不太可能解决这个特定的问题(文件打开代码看起来是相同的),但它可能会帮助你一些:前一段时间,我写了一个非常小的包装库通过COM访问Excel,可以在这里find。 它的function是非常有限的,但更多的方法可以很容易地添加; 它主要给这个聚会带来的是一个稍微干净的API,稍微好一点的error handling。