Автоматизация Word с C++ Builder 5

Я пытаюсь контролировать Word через приложение C++ Builder 5. Я хотел бы открыть файл модели ".dot", созданный с помощью Word, и изменить его. В файле модели ".dot" есть несколько полей. Например, Title, LastName, FirstName, Addressи так далее, и я хотел бы изменить эти поля, добавив в них текст, а затем сохранив файл с новым именем, например "Warning.doc", оставив файл ".dot" без изменений.

Я могу открыть файл, подсчитать количество полей, которые в нем содержатся, но потом, когда дело доходит до замены каждого поля строкой, я не знаю, как это сделать, потому что у меня нет полной документации по методам 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);
   }
 }

1 ответ

Я никогда не использовал слово Ole, но я использовал его для Outlook и Excel, я не могу попробовать это со словом, так как я в настоящее время на OSX, но вы должны попробовать что-то похожее, как я.

Универсальный способ использования 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), затем выбираю _worksheet из _workbook и начинаю свой бизнес.

Здесь начинается интересная часть:

Он состоит в том, чтобы добраться до определенной ячейки, получить из нее объект шрифта, а затем установить цвет этого объекта шрифта.

Отказ от ответственности: Это пример из моих источников для Excel, он не имеет прямого отношения к вашему примеру, но, возможно, вы можете понять принцип с ним. Я не могу понять, что тебе нужно, потому что у меня сейчас нет окон.

Надеюсь, это поможет вам. Поиск ресурсов для OLE может быть жестким, если у вас нет хороших шаблонов для поиска.

Другие вопросы по тегам