通过COM/OLE的PHP 5.5 Excel对象无法加载文件

通过COM/OLE的PHP 5.5 Excel对象无法加载文件,php,excel,com,ole,Php,Excel,Com,Ole,情况:我目前正在将一个内部行业web应用程序从Windows Server 2003/Apache 2.2/Php 5.3/Oracle 10迁移到Windows Server 2012/Apache 2.4/Php 5.5/Oracle 12c 应用程序使用扩展com_dotnet将服务器端安装的excel用于特殊报告。我知道在服务器端使用excel并不是处理工作表的首选方式,但曾经决定这样做是因为 PHPExcel不可用,或者至少功能不够强大 一次使用报告的人不得超过一人 问题详情:PH

情况:我目前正在将一个内部行业web应用程序从Windows Server 2003/Apache 2.2/Php 5.3/Oracle 10迁移到Windows Server 2012/Apache 2.4/Php 5.5/Oracle 12c

应用程序使用扩展com_dotnet将服务器端安装的excel用于特殊报告。我知道在服务器端使用excel并不是处理工作表的首选方式,但曾经决定这样做是因为

  • PHPExcel不可用,或者至少功能不够强大
  • 一次使用报告的人不得超过一人
问题详情:PHP创建Excel对象OK:

 try {
      $excel = new COM("Excel.application");
      $excel->DisplayAlerts = 0;
      $excel->Visible = 0;
    } catch (Exception $e) {
    ...
    }
但是,当我尝试打开文件时,出现了一个错误:

 try {
        $excel->Workbooks->Open($fn);
      } catch (Exception $e) {
        $excel->Quit();
        $excel = null;
        // ... Errormessage ...;
        return;
      }
错误消息(以$e为单位)表示Excel无法找到或打开请求的文件。在使用Netbeans进行调试时,我可以看到excel实例出现在Windows任务管理器中

我所尝试的

  • 确保$fn中的文件可以打开。将文件权限更改为“everyone”无效
  • 在路径中使用/和\并尝试用“.”环绕路径
不幸的是,安装是德语的,错误消息也是:

资料来源:Microsoft Excel

描述:Microsoft Excel kann auf die Datei'd:\apps\webroot\vebill\share\reports\Test.xls'nicht zugreifen.Dies kann mehrere Gründe haben:

  • 这是我的名字
  • 这是一个非常简单的程序
  • 在Arbeitsmappe的名字中,他是一个独立的名字,是一个独立的名字
这些条件都不是真的

非常感谢您的帮助!谢谢

我忘记提到的是,旧安装使用Excel 2010,新安装使用Excel 2016

我在Procmon中发现的内容:根据建议,我使用了Procmon并对EXCEL.EXE事件进行了筛选。EXEL创建文件并打开查询信息,并且对该文件的所有以下操作都获得了成功!只有一行可能指向错误:

 try {
        $excel->Workbooks->Open($fn);
      } catch (Exception $e) {
        $excel->Quit();
        $excel = null;
        // ... Errormessage ...;
        return;
      }
18:43:229966615
EXCEL.EXE
5916
CreateFileMapping
D:\apps\webroot\vebill\share\reports\Test.xls
仅使用读卡器锁定文件
SyncType:SyncTypeCreateSection,页面保护:

但稍后在日志中,Excel会多次访问该文件,并且不会出现任何错误

更新1:我将Apache服务的登录凭据更改为我正在使用的管理员用户-错误保持不变:Led Zeppelin alredy Knowed;-)

更新2:发现此问题,我的问题是重复的,不幸的是,此问题也未解决。将立即尝试移动到PHPExcel


说明:Microsoft Excel无法访问文件“d:\apps\webroot\vebill\share\reports\test.xls”。这可能有几个原因:文档的名称或路径不存在。该文档被其他程序使用。要保存的工作簿的名称与正在保存的另一个文档的名称相同只读。
是否检查了所有这些情况?路径正确(带双斜杠d:\\apps\\…),文档已打开..?用于了解发生了什么。是的,这是我收到的错误消息的准确翻译,如上所述,这些情况都不是真的。此外,我尝试了/和\\。该应用程序在旧环境中使用正向斜杠。迁移到PHPExcel比预期的要容易得多。只缺少一个功能,可以解决它有一个解决办法。。。