【问题标题】:PHP fails to open an Excel workbook through COMPHP 无法通过 COM 打开 Excel 工作簿
【发布时间】:2013-12-10 06:39:27
【问题描述】:

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

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

有人对为什么会发生这种情况有任何建议吗?我查看了很多其他帖子,但似乎没有人遇到这个特定问题。

【问题讨论】:

    标签: php excel file-io com


    【解决方案1】:

    我假设您需要使用 COM 而不是像PHPExcel 这样的第 3 方库是有原因的。如果没有具体原因,请考虑改用这些经过尝试、测试且得到更好支持的替代方案。


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

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

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

    这不太可能解决这个特定问题(文件打开代码似乎相同)但它可能会对您有所帮助:前段时间我为通过 COM 访问的 Excel 编写了一个非常小的包装库,可以找到here。它的功能非常有限,但可以很容易地添加更多方法;它主要为聚会带来的是更简洁的 API 和更好的错误处理。

    【讨论】:

    • 首先感谢您的帮助。我试过你的建议,但没有用。我得到的具体或不那么具体的错误是“致命错误:在第 22 行的 C:\xampp\htdocs\php\ExcelReader.php 中”。第 22 行是尝试打开工作簿的行。 php.ini文件如下...[COM_DOT_NET] extension=php_com_dotnet.dll [COM] com.allow_dcom = true com.autoregister_typelib = true com.autoregister_casesensitive = false ;com.autoregister_verbose = true
    • @user3032510 如果您的问题与 ini 设置有关,我会感到惊讶,如果您对扩展程序本身有问题并且您的设置未创建,我希望它在 new COM 行上失败区分大小写的方法,这是我可以通过这个简单的操作看到的唯一其他潜在问题。请注意,COM 将在错误时抛出异常,因此您 or die() 没有多大意义 - 尝试将函数体包装在 try/catch 中并回显异常消息。以我的经验,抛出的消息仍然相当无用,但你永远不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多