PHP4(windows版本)中的COM函數這幾天一直在寫excel轉化成mysql,發現一篇文章,搜一下phpx論壇,沒有這個帖子,把它轉帖如下:


PHP4(windows版本)中的COM函數


介紹

內置于PHP4里的COM " /> 最好看的毛片,免费羞羞网站,免费看一级黄色

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

PHP4(windows版本)中的COM函數


php4(windows版本)中的COM函數這幾天一直在寫excel轉化成mysql,發現一篇文章,搜一下phpx論壇,沒有這個帖子,把它轉帖如下:


php4(windows版本)中的COM函數


介紹

內置于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 的例子如下: [url]http://msdn.microsoft.com/library/officedev/off2000/xltocobjectmodelapplication.htm[/url]


用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文件名,使用這個默認的Joboptions 文件。例如:


$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的結合,提供了一個開放源碼的解決方案。

php技術PHP4(windows版本)中的COM函數,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 玖草资源在线 | 欧美国产一区二区二区 | 91麻豆精品国产剧情 | 曰本视频网络www色 曰韩美女一级视频 | 欧美精品第1页www劲爆 | 国产精品91av | 在线播放一区二区三区 | 国产欧美性综合视频性刺激 | 伊人色综合久久天天 | 久久青青91费线频观青 | 亚洲精品网站在线 | 一本色道久久88综合亚洲精品高清 | 91精品久久久久久久99蜜桃 | 偷拍亚洲色图 | 91原创在线 | 伊人网成人 | 看全色黄大色黄大片色责看的 | 欧美性色xo影院永久禁欲 | 国产极品美女在线观看 | 99热国产在线 | 一级做a爰片久久毛片看看 一级做a爰片久久毛片毛片 | 国产精品麻豆一区二区三区v视界 | 久久久久网站 | 色多多入口 | 高清视频一区二区 | 玖玖精品在线视频 | 色老板免费在线 | 香港三级午夜理伦三级99 | 亚洲国产精品一区二区三区在线观看 | 亚洲一区二区三区四区在线观看 | 看全色黄大色大片免费久久怂 | 亚洲视频一二区 | 伊人色综合久久大香 | 黄色美女网站视频 | 精品国产一区二区三区免费 | 日日噜噜夜夜躁躁狠狠 | 四虎在线免费观看视频 | 国产伦精品一区二区三区视频小说 | 男人扒开女人腿做爽爽视频网站 | 欧美极品欧美精品欧美图片 | 国产精品热久久毛片 |