乔山办公网我们一直在努力
您的位置:乔山办公网 > office365 > PHP com 组件调用excel 失败?-office 07 注册com组件,如何注册com组件

PHP com 组件调用excel 失败?-office 07 注册com组件,如何注册com组件

作者:乔山办公网日期:

返回目录:office365


先到PHP.INI中打开COM选项,com.allow_dcom = true


PHP 5.4.5后,com/dotnet 模块e799bee5baa6e997aee7ad94e4b893e5b19e363已经成了单独的扩展,所以需要在PHP.ini中配置extension=php_com_dotnet.dll,如果PHP VERSION<5.4.5 则不需要。否则的话,可能就是报错 Fatal error: Class 'COM' not found 了


配置方法为:只需在扩展列表里添加extension=php_com_dotnet.dll即可

另外需要了解的是,COM组件虽然也是DLL扩展,但它不是PHP扩展,所以把Senc.dll拷贝到php/ext 目录,然后在PHP.INI里加载是错误的,PHP也不认识它


配置完毕后可以测试下,语句为

$word = new COM("word.application") or die("Unable to instanciate Word");
print "Loaded Word, version {$word->Version}\n";

上面语句本机必须安装了office才可以

openoffice的为:

$obj = new COM("com.sun.star.ServiceManager") or die("Unable to instanciate Word");


以下一个php调用COM访问excel的示例:

<?php
//指定页面编码,防止出现中文乱码的情形
header('Content-type: text/html; charset=gb2312');

//启动Excel
$ms_excel = new COM("excel.application") or die("不能打开Excel应用程序");

//打开excel文件
$ms_excel->Application->WorkBooks->Open( 'e:\test\test.xls') or die("不能打开工作簿");

//在工作簿的第2个工作表的单元格B1中输入文本
$ms_excel->Worksheets(2)->Range("B1")->Value = "测试";

//保存工作簿
if(!$ms_excel->ActiveWorkBook->Saved)
{
$ms_excel->ActiveWorkBook->save();
}

//关闭工作簿
$ms_excel->Quit();

//清空对象
$ms_excel = null;
?>
工作流程:
  1.创建一个进程外COM服务器(EXE)。
  2.将32位dll的接口函数封装为COM服务器的相关接口。
  3.注册COM服务器*.exe /regserver (注销 *.exe /unregserver)。
  4.64位进程调用32位COM服务器接口,成功。从而曲线实现了64位进程调用32位dll。

  具体步骤:
  我首先创建了一个简单的dll工程,只输出一个函数int c = add(int a,int b); 生成lib和dll
  然后创建一个进程外COM(EXE类型),内部链接dll,添加方法Method: Add(long *c)
  { *c = add(1,2);}编译生成。
  然后注册COM,*.exe /regserver
  最创建一个64位WIN32工程验证64位环境下方法调用是否正确,经验证正确!!!

  结论:以上方法可以解决64位进程调用32位dll的问题

  32位进程调用64位dll应该也可以通过这种方法解决,原因64位windows系统下安装了32位和64位两套COM系统

你将这个32位的 COM 用64 位的代码封装一下,再调用试试。

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网