PHP COM('word.application')函数和方法参数问题

时间:2017-05-31 15:50:55

标签: php vba ms-word com

我正在使用php和新的COM('word.application')来操作.doc文件(添加和编辑字段),我在使用apache 2.4.25 x64和php 7.0的Windows Server 2012 R2上。 17 x64。

到目前为止,我制作了一个非常简单的代码,但是在使用具有多个参数的函数时遇到了问题

$word->Documents[1]->Protect(3, false, 'mypassword', false, false);

我收到以下错误:

[Erreur] Impossible de lancer le connecteur Microsoft Office Word。 :com_exception:参数4:Le type ne Correspon pas

英文翻译:

[错误]无法使用Microsoft Office Word连接器:com_exception:参数4:类型不对应

在像这样的VBA代码中它正在工作

ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True

根据VBA中的文档

And this : https://msdn.microsof t.com/en-us/library/office/aa220366(V = office.11​​)的.aspx

参数2,4和5应该是布尔值,所以我不知道为什么我会收到这个错误。如果我删除参数4和5,我得到相同的错误,但在参数2上。

通过一些搜索,我查看了对象new VARIANT(),但它也没有用。

我还有$ this->文件1 - > SaveAs()

的问题
$fileName = "D:\\test.doc";
$this->Documents[1]->SaveAs($fileName);

有效。

根据文档(https://msdn.microsoft.com/en-us/library/microsoft.office.tools.word.document.saveas(v=vs.120).aspx),我应该可以使用第二个参数:

$fileName = "D:\\test.doc";
$fileFormat = 0;
$this->Documents[1]->SaveAs($fileName, $fileFormat);

像这样我有错误“参数0:Le type ne Correspon pas”(类型不对应)。

在VBA中它的工作方式不同,也许我做错了......

非常感谢你帮助我:)。

编辑:完整示例代码

<?php

$word = new COM("word.application") or die("Cannot create Word object");
echo "com object created<br>";
$word->Visible = false;
$word->WindowState = 2;
$word->DisplayAlerts = false;
$word->Documents->Open("D:\\test.doc");
echo "document loaded<br>";

$import = $word->Documents[1]->VBProject->VBComponents->Import("D:\\fr.mac");
$import->name = "Macrofr";

$myModule = $word->Documents[1]->VBProject->VBComponents->Import("D:\\test1.mac");
$myModule->name = "MacroInit";

$myModule2 = $word->Documents[1]->VBProject->VBComponents->Import("D:\\test2.mac");
$myModule2->name = "MacroFonction";

$myModule3 = $word->Documents[1]->VBProject->VBComponents->Import("D:\\test3.frm");
$myModule3->name = "MacroProgression";


$word->Documents[1]->Protect(3,false,'motdepasse',false,false); // (type de protection,noReset,mdp)

$word->Documents[1]->SaveAs("D:\\doc_with_macro.doc", 0);
$word->Documents[1]->Close();
echo "closing doc<br>";

$word->Quit();
$word = null;
echo "end<br>";

1 个答案:

答案 0 :(得分:0)

我在此代码中看到的唯一问题与 protect function 有关。第一个参数必须是 VARIANT 像这样:

$word->Documents[1]->Protect(
        new VARIANT(3, VT_I4),
        false,
        'Your password',
        false,
        true
  );