Автоматизация 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 может быть жестким, если у вас нет хороших шаблонов для поиска.