2

我正在尝试通过 c++ builder 5 应用程序控制 Word。我想打开一个用 Word 创建的“.dot”模型文件并修改它。在“.dot”模型文件中有一些字段。例如,、 、Title等等LastName, 我想修改这些字段,将文本放入其中,然后用新名称保存文件,例如“Warning.doc”,而“.dot”文件保持不变。FirstNameAddress

我可以打开文件,计算它包含的字段数,但是当用字符串替换每个字段时,我不知道该怎么做,因为我没有关于 OleFunction 和 OlePropertyGet 方法的完整文档。我将我的源代码附加到此消息中,有人可以帮我解决这个问题吗?

try
{
       my_word = Variant::CreateObject("word.application");
}
catch (...)
{
       Application->MessageBox("Unable to obtain Word automation object",
                               "Error:",MB_OK | MB_ICONERROR);
}
my_word.OlePropertySet("Visible", (Variant)true); 

void __fastcall TForm1::Button2Click(TObject *Sender)
{
   Variant  this_doc;
   Variant  my_fields;
   Variant  test;
   int k,field_count;
   AnsiString test1;

   AnsiString filename = "d:\\ProgrammaWord\\1-Avviso.dot";

   my_docs = my_word.OlePropertyGet("Documents");

   this_doc = my_docs.OleFunction("Open", filename);

   my_fields = this_doc.OlePropertyGet("Fields");

   field_count = my_fields.OlePropertyGet("Count");

   for(k = 1; k <= field_count; k++)
   {
     test = my_fields.OleFunction("Item",(Variant)k);
     test1 = test.OleFunction("Value");  //This instruction throws an exception
                                         // "Value" is not a recognized parameter 
                                         // in this case
     Memo1->Lines->Add(test1);
   }
 }
4

1 回答 1

0

我从未使用过 Ole 这个词,但我将它用于 Outlook 和 Excel,因为我目前在 OSX 上,所以我不能用 word 尝试它,但你应该尝试与我所做的类似的事情。

使用 Ole 的一般方式是 OleGetproperty(),而您获得目标字段,然后是 OleSetProperty("action", ...)。

例如,当我想更改我使用的 excel 文档的特定单元格中的文本颜色时:

Variant _excel = Variant::CreateObject("Excel.Application");
Variant _workbook = _excel.OlePropertyGet("WorkBooks").OleFunction("Open", filename);
Variant _worksheet = _workbook.OlePropertyGet("WorkSheets", sheet);

_worksheet.OlePropertyGet("Cells", row, col).OlePropertyGet("Font").OlePropertySet("Color", color);

在这里,我实例化了一个 excel 对象,然后将文件加载到其中(_workbook),然后从 _workbook 中选择 _worksheet 并开始我的业务。

有趣的部分来了:

它包括获取特定单元格,从中获取字体对象,然后设置此字体对象的颜色。

免责声明:这是我的excel来源中的一个例子,它与你的例子没有直接关系,但也许你可以理解它的原理。我无法弄清楚您需要什么,因为我现在没有窗户。

希望这可以帮到你。如果您没有要寻找的好模式,那么为 OLE 寻找资源可能会很困难。

于 2014-06-18T13:20:04.970 回答