直到它到达打开的工作簿行,然后失败此代码工作正常。
<?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");
}
有没有人有,为什么这可能会发生什么建议? 我看了,虽然很多其他职位,但似乎没有人有这个具体问题。
我认为有一些原因,你需要使用COM,而不是第三方库像PHPExcel 。 如果没有这个具体的原因,考虑切换到一个这些尝试,测试,大大更好的支持方案。
您的代码似乎是正确的,我只能想象你有某种权限问题。
它可以是相当难以从通过COM在PHP MSO应用有意义的错误信息,所以这里的一对夫妇的事情,你可以尝试:
- 验证文件扩展名(
.xls
在你的情况下)的文件中的数据相匹配-确保你没有一个CSV与错误的文件扩展名文件,例如。 Excel文件(即使通过COM访问)应该能够处理这个问题,但如果你打开Excel应用程序文件就会抛出一个警告。 - 在Excel中打开文件,输入一个空单元格,删除你刚才输入的内容,并保存它。 这将导致Excel以重新编码和写入整个文件恢复到磁盘,这也可以帮助解决任何损坏的文件的问题。
- 确保文件上有相应的权限。 要做到这一点,最好的办法是把文件设为完全权限为“Everyone”组,如果这能解决问题,你可以再调整权限要求的限制。
这是极不可能解决这个特定问题(文件打开代码似乎是相同的),但它可以帮助你一点:前一段时间我写了通过COM访问Excel的一个非常小包装库,可以发现在这里 。 它的功能是非常有限的,但更多的方法可以很容易地添加; 它主要是带给党是一个稍微更简洁的API和稍微好一点的错误处理。