Автоматизация 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);
}
}

2

Решение

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

Универсальным способом использования Ole было использование OleGetproperty (), в то время как вы получаете целевое поле, а затем OleSetProperty («действие», …).

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

0

Другие решения

Других решений пока нет …