COM 和 .Net (Windows)

添加注释

用户贡献注释 6 个注释

acsandeep at gmail dot com
15 年前
如果您尝试获取通过 COM 对象打开的 Word 文档的属性,则可能需要在您的脚本中定义一些常量,如下所示。

<?php
define
('wdPropertyTitle', 1);
define('wdPropertySubject', 2);
define('wdPropertyAuthor', 3);
define('wdPropertyKeywords', 4);
define('wdPropertyComments', 5);
define('wdPropertyTemplate', 6);
define('wdPropertyLastAuthor', 7);

$word = new COM("word.application") or die ("Could not initialise MS Word object.");
$word->Documents->Open(realpath("Sample.doc"));
$Author = $word->ActiveDocument->BuiltInDocumentProperties(wdPropertyAuthor);

echo
$Author;
?>
robert dot johnson at icap dot com
12 年前
(来自?) Windows 上的 PHP 5.4.5

如果在错误日志中看到以下内容

致命错误:类“COM”未找到

您需要在 php.ini 中添加以下内容

[PHP_COM_DOTNET]
extension=php_com_dotnet.dll

以前,它在 Windows 构建中作为内置组件进行编译。我假设这种情况的发生是因为 com 扩展现在可以作为共享组件构建。
long2hu3 ATT yahoo DOTT com
15 年前
当您使用 MS Excel、Word 等应用程序时,请永远不要忘记 COM 不知道它们的预定义常量,因此,如果您想在 VB 中执行以下操作

With myRange.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

您应该使用数字或在上面定义常量,如下所示

<?php

define
('xlEdgeBottom', 9);
define('xlContinuous', 1);
define('xlThin', 2);
define('xlAutomatic', -4105);

$ex = new COM("Excel.Application", NULL, CP_UTF8) or Die ("Did not instantiate Excel");
$wb = $ex->Application->Workbooks->Add();
$ws = $wb->Worksheets(1);

$xra = $ws->Range("A1:A6");

$bs = $xra->Borders(xlEdgeBottom);
$bs->LineStyle = xlContinuous;
$bs->Weight = xlThin;
$bs->ColorIndex = xlAutomatic;

?>

尝试使用文本字符串是毫无意义的,例如

<?php

$bs
= $xra->Borders('xlEdgeBottom');
$bs->Weight = 'xlThin';

?>

这会导致错误:无法设置类 Border 的 Weight 属性...
匿名
14 年前
在 Word 文档的书签处添加超链接

<?php
// 创建 COM 实例到 word
function clsMSWord($Visible = false)
{
$this->handle = new COM("word.application") or die("Unable to instanciate Word");
$this->handle->Visible = $Visible;
}

function
WriteHyperlink($Bookmark,$Path,$Text)
{
$objBookmark = $this->handle->ActiveDocument->Bookmarks($Bookmark);
$range = $objBookmark->Range;
$objHyperlink = $this->handle->ActiveDocument->Hyperlinks;
$objHyperlink->add($range,$Path,"","",$Text);

}
?>
ilayansmano at gmail dot com
15 年前
通过 PHP 和 COM 从 Word 文档中提取文本

<?php
$word
= new COM("word.application") or die ("Could not initialise MS Word object.");
$word->Documents->Open(realpath("Sample.doc"));

// 提取内容。
$content = (string) $word->ActiveDocument->Content;

echo
$content;

$word->ActiveDocument->Close(false);

$word->Quit();
$word = null;
unset(
$word);
?>
Dave Bachtel
15 年前
大家好!

以下是一些针对尝试使用 COM 与 Microsoft MapPoint 2006 或 2009 的 PHP 用户的实用建议。

如果您使用的是 apache,它必须以与已安装/运行 MapPoint 的桌面用户相同的凭据运行,或者修改服务并选择“允许服务与桌面交互”选项。否则,由于必须接受 EULA 弹出窗口,它将无法工作。MapPoint 2004 运行良好,这仅适用于 2006 和 2009。

对于故障排除,系统事件查看器中出现的错误为
服务器 {31851F82-AFE6-11D2-A3C9-00C04F72F340} 未在规定的超时时间内向 DCOM 注册。

PHP 生成的错误,如果您幸运地让 COM() 函数通过提高 set_time_limit() 超时时间而超时,则为
<?php

set_time_limit
(1000) ;

$mapoint = new COM("MapPoint.Application") or die("Unable to instantiate Mappoint COM object");

?>
生成
致命错误:未捕获的异常“com_exception”,消息为“无法创建 COM 对象`MapPoint.Application`:服务器执行失败”在 [somefile.php]:9 处堆栈跟踪:#0 [somefile.php](9):com->com('MapPoint.Applic...') #1 {main} 在 [somefile.php] 的第 9 行抛出

此外,如果您安装了多个版本的 MapPoint,则需要运行
c:\path\to\mappoint\MapPoint.exe /registerserver

(使用正确的文件夹路径)来选择要使用的 COM 对象的正确版本。祝您好运!
To Top