科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件PHP4中的COM函数探讨

PHP4中的COM函数探讨

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

内置于PHP4里的COM函数对于我们在win32环境下开发程序是相当有吸引力的,但是至今仍没有多少相关的技术文档...

作者:sheawey 来源:freelamp 2007年10月26日

关键字: Linux

  • 评论
  • 分享微博
  • 分享邮件
用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 $47,732 before.
";
#根据计算公式,广告影响了公司的开销,这里将显示 $57,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 $10,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的结合,提供了一个开放源码的解决方案。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章