|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
就是管理员可以编辑,删除,回复 等功能,。加入管理员功能要加入登陆系统,慢慢你会想在线添加管理员,慢慢你会让自己的作品更漂亮些,慢慢1个完整的留言板就会出来了,window|函数 引见
内置于PHP4里的COM函数关于咱们在win32情况下开辟法式是相当有吸引力的,然而至今仍没有几何相干的手艺文档。本文将以三个例子分离处置 MS office 2000 Word 、 Excel 、 Adobe Distiller 来讲明若何在PHP中利用COM函数。
COM手艺是由Microsoft在几年条件出并开辟的,本文中提到的相干名词有OLE, OLE Automation, ActiveX, COM ,这些词的意思都根基一样,都暗示用一段封装的代码(对象)来完成一个windows 使用法式的一些功效。 PHP4 COM 函数可以毗连一个对象实例,并利用它的办法与属性。
假如你想利用上面的例子源码,请参考一下我的设置装备摆设。
Windows 98 - MS Office 2000
Apache 1.3.9 Windows
PHP4.02 Dev (08-20-00) Running as CGI
PHP4中的COM标志
如今让咱们入手下手吧,用PHP4的COM来实例化一个组件,需求 new 操作符和对象的 "OLE 法式标识":
$instance = new COM("$identifier");
?>
由于COM是一个PHP4的保存字,它传送这个对象的标识给一个机关函数,如今失掉了这个组件的一个实例,依据OOP类的性质,咱们可以很轻易地会见它的办法与属性。
例如:
$instance->[Object]->[method1]->[method2]->..->[property];
?>
就是这么复杂!
OOP的布局在PHP下不克不及任务,(因为PHP语法的成绩,属性的名字.值长短法字符,如点和圆括号等),所以PHP4供应了两个响应的函数:
bool com_set(class com_object, string property name, string property_value);
mixed com_get(class com_object, string property_name);
?>
最初,PHP4也撑持DCOM手艺,可以在近程盘算机创立一个对象实例。
$Instance = new COM(string "Component name", string "remote_server_address");
?>
注重:这是用DCOM指令来设置PHP。在未来,PHP开辟者供应Unix下对DCOM的撑持。
标识、办法和属性
标识是一个以下的字串:
MS Word: "Word.Application" or "Word.Application.9"
MS Excel: "Excel.Application" or "Excel.Sheet"
ADOBE Acrobat: "Exch.application" or "PdfDistiller.PdfDistiller"
关于最初一个标识,我要指明的是,取得准确的对象标识名不是一件轻易的事。假如你不克不及会见VBA文档,你可以查找一下windows的注册表,在 HKEY_CLASSES_ROOT 中寻觅一下,你就能够失掉一些使用法式的名字。在你的机械上无效的对象标识放在 CLSID 子文件夹下。
使用法式普通会供应文档申明它的COM办法和属性。在office2000中,你可以运转法式,翻开VBA编纂器 ,选择对象编纂器。输出使用法式库中的一个办法名或属性名,然后,鄙人面的窗口顶用鼠标右键选择一个类或成员称号,点匡助,你就会失掉关于这个类或成员的描写。你也能够参考 MSDN。一个 Excel 的例子以下: http://msdn.microsoft.com/library/officedev/off2000/xltocobjectmodelapplication.htm
用COM函数操作 MS Word
如今,咱们入手下手第一个例子吧:
#*********************************************************
# 本例来自Zend站点,略有修改
# 翻开一个word实例,并新建一个文档Useless test.doc
# 输出一行文字 "This is a test2..."
#*********************************************************
#实例化一个对象
$word = new COM("word.application") or die("Unable to instantiate Word");
#获得并显示版本
print "Loaded Word, version {$word->Version}
";
#另外一种办法去获得版本
$testversion = com_get($word->application,version);
print "Version using Com_get(): $testversion
";
#使其可见
$word->Visible = 1;
#创立新文件
$word->Documents->Add();
#写字符
$word->Selection->TypeText("This is a test...");
#保留
$word->Documents[1]->SaveAs("Useless test.doc");
#封闭
$word->Quit();
?>
你只需花几分钟来读这个法式,并参考Word的OLE 手艺文档,你将学到几近是你在本人法式中所需的全体的操作。
MS Excel在利用PHP的COM函数
好像下面的Word的例子一样,你应进修这个例子的同时参考Excel的Visual Basic 编纂器中的对象阅读器的匡助文档。
#翻开workbook和它的sheet,
#本例利用一个电子表格是Excel装置时自带的SOLVSAMP.XLS
$workbook = "C:Program FilesMicrosoft officeOfficeSamplesSOLVSAMP.XLS";
$sheet = "Quick Tour";
#实例化一个组件的对象
$ex = new COM("Excel.sheet") or Die ("Did not connect");
#取法式称号和版本
print "Application name:{$ex->Application->value}
" ;
print "Loaded version: {$ex->Application->version}
";
#翻开任务本使咱们可以使用它
$wkb = $ex->application->Workbooks->Open($workbook) or Die ("Did not open");
#预保留本来的任务本,创立一个任务本的复本
$ex->Application->ActiveWorkbook->SaveAs("Ourtest");
#$ex->Application->Visible = 1; #本句去正文让Excel可见
# 读写一个单位格在一个新的任务表中
# 咱们可以读到这个单位格 E11 (Advertising in the 4th. Quarter)
$sheets = $wkb->Worksheets($sheet); #Select the sheet
$sheets->activate; #Activate it
$cell = $sheets->Cells(11,5) ; #Select the cell (Row Column number)
$cell->activate; #Activate the cell
print "Old Value = {$cell->value}
"; #Print the value of the cell:10000
$cell->value = 15000; #Change it to 15000
print "New value = {$cell->value}
";#Print the new value=15000
#最初,用新值从头盘算这个单位格
$sheets->Calculate;
#必需的假如要盘算,手动则是可选的
#可看到后果总价值(E13单位格)
$cell = $sheets->Cells(13,5) ; #Select the cell (Row Column number)
$number = Number_format($cell->value);
print "New Total cost =$$number - was ,732 before.
";
#依据盘算公式,告白影响了公司的开支,这里将显示 ,809
#利用Excel内建的函数
# PMT(percent/12 months,Number of payments,Loan amount)
$pay = $ex->application->pmt(0.08/12,10,10000);
$pay = sprintf("%.2f",$pay);
print "Monthly payment for ,000 loan @8% interest /10 months: $ $pay
";
#Should print monthly payment = $ -1,037.03
#可选,保留
$ex->Application->ActiveWorkbook->SaveAs("Ourtest");
#封闭,不发问
$ex->application->ActiveWorkbook->Close("False");
unset ($ex);
?>
这个例子让你的PHP与Excel一同任务了,固然,也有更多的对象可使用,会见一个自已写的OOP封装类也与会见excel一样轻易。
用PHP的COM会见 Adobe Distiller
这最初一个例子不是MS法式了,假如你的法式有一个PostScript文件,你会对这个有乐趣的,改写(蒸馏)它成为一个PDF文档. Adobe 有一个法式叫 Distiller ,它可以生成一个实例。代码以下:
$pdf = new COM("pdfdistiller.pdfdistiller.1");
?>
有一点要注重的,是在Distiller 的文档中给出的这个OLE标识名 "pdfdistiller" 是有效的。
蒸馏一个文件的最根基的办法是:
$pdf->FileToPdf ($psfile, strOutputPDF '', strJobOptions "");
?>
这 $psfile 是这个PostScript的文件名, strOutputPDF 是输入文件PDF的文件名。 StrJobOptions 是Distiller的参数文件名,最初两个参数是可选的,默许是统一名字。 这PS文件名与PDF文件名,利用这个默许的Job options 文件。例如:
$pdf->FileToPdf ($psfile, "", "");
#这儿$psfile 可所以 Myfile.ps 将前往 Myfile.pdf 文件。
?>
在Distiller中有更多的办法和属功能被用。假如你感乐趣,请参考一下Adobe的手艺文档。
中断/能够的成绩
假如你的代码中产生了甚么毛病,你能够会创立了一个实例,但没有正常地封闭它。最糟的是,这个使用法式能够被这个实例所坚持,了局,在你的法式列表中就存在多份这个法式的正本,即便你更正了这个毛病也会搅扰你的了局。处理办法是:修改一个bug以来要实时排除它们在你从头入手下手运转之前,用 并停止义务。一样的缘由,在你的代码最初,也要实时封闭这个法式并删除这个实例。
你有一些技能在处置 com_get 和 com_set的异常时。例如:
$Version = Com_get($instance->Application,"Version");
将会在Word中任务但在Excel中会发生一个毛病。
有一些对象在PHP4中是不克不及实例化的,这是由于这个法式要一个自界说的接口,但PHP4不撑持。
为何咱们要用它?
我但愿这三个例子可以给你一些思虑的线索,PHP的COM答应你在PHP的剧本中会见windows4的法式。这个代码比ASP复杂而且能集成其它的PHP对数据库壮大的撑持功效。Microsoft 在各个方面都鼎力发卖这个COM 手艺,在分歧的称号和布局下,如 COM+(Combine COM with Microsoft Transaction Server MTS), ADO, OLE DB, OWC, Windows DNA, 等等。 PHP 和 Apache的联合,供应了一个开放源码的处理计划。
工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量。 |
|