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

时间:2013-11-25 13:46:54

标签: php excel file-io com

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

 <?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");
}

有没有人对为什么会这样做有任何建议?我看了很多其他帖子,但似乎没有人有这个具体问题。

1 个答案:

答案 0 :(得分:0)

我将假设您需要使用COM而不是像PHPExcel这样的第三方库。如果没有具体原因,请考虑切换到这些经过试验,测试和支持的替代方案。


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

通过COM从PHP中的MSO应用程序中提取合理的错误消息可能非常困难,所以您可以尝试以下几种方法:

  • 验证文件扩展名(在您的情况下为.xls)是否与文件内的数据匹配 - 例如,确保您没有包含错误文件扩展名的CSV文件。 Excel(即使通过COM访问)应该能够处理这个问题,但如果你在Excel应用程序中打开文件,它会发出警告。
  • 在Excel中打开文件,输入一个空单元格,删除刚输入的内容并保存。这将导致Excel重新编码并将整个文件写回磁盘,这也可能有助于解决任何损坏的文件问题。
  • 确保该文件具有相应的权限。执行此操作的最佳方法是将文件设置为“Everyone”组的完全权限,如果这样可以解决问题,则可以将权限调整为所需的限制。

这极不可能修复这个特定的问题(文件打开代码看起来是相同的)但它可能会帮助你一点:前段时间我写了一个非常小的Excel包装程序库,通过COM访问,可以找到here。它的功能非常有限,但可以很容易地添加更多方法;它最常带给派对的是一个稍微清洁的API和稍微好一点的错误处理。