Как вставить картинку в Word-документ?
Variant wordApp = Variant::CreateObject("Word.Application");
?
Спасибо
AnsiString S = "1.bmp";
Variant T = True;
Variant wordApp = Variant::CreateObject("Word.Application");
wordApp.OlePropertyGet("ActiveDocument").OlePropertyGet("Shapes").OleFunction("AddPicture",
StringToOleStr(S), T, T, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam);
Но выдает run-time error "Project raised exception EOLESysError "Exception Occurred".
Process stopped."
Что неправильно?
WideString FileName("verbtabl.bmp");
try
{
try
{
WordApplication->Connect();
}
catch (Exception &exception)
{
ShowMessage("Word не запускается");
return;
}
WordApplication->Documents->Add();
WordDocument->ConnectTo(WordApplication->ActiveDocument);
WordApplication->Selection->InlineShapes->AddPicture(BSTR(FileName));
WordApplication->GetDefaultInterface()->Visible = true;
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
// WordApplication->Disconnect();
Вобще вещь довольно капризная (особенно при работе со строками), но по крайней мере имеется развернутое сообщение об ошибках с указанием строки в h-файле. (У меня тоже не сразу пошло :-))
Продолжаю пытаться сделать своим путем( вот так ):
WideString BmpFileName("1.bmp");
Function AddPicture("AddPicture");
Variant Shapes = currentDoc.OlePropertyGet("Shapes");
Shapes.Exec(AddPicture << BmpFileName);
Ошибка уже другая - говорит, что неправильно задано имя файла
Как правильно задать, пока не знаю:(
WideString BmpFileName;
// заводится ПОЛНОЕ имя с именем директории
Wrd=CreateOleObject("Word.Application");
Variant currentDoc = Wrd.OlePropertyGet("ActiveDocument");
Variant Shapes = currentDoc.OlePropertyGet("Shapes");
Shapes.Exec(AddPicture << BmpFileName);
Но если попробовать потом вставить еще одну картинку, то получается ошибка "Exception class EOleException with Message 'Type mismatch'. Process stopped."
Может быть, кто-нибудь знает, в чем дело?
Shapes = currentDoc.OlePropertyGet("Shapes");
Function AddPic("AddPicture");
Shapes.Exec( AddPic << WideString("Test.bmp"));
AddPic.ClearArgs();
Вот как это лечится
Осталась одна проблема - как вставить картинку на нужное место ( например, после 5 строки текста)?
WordApplication->Selection->TypeParagraph();
(Складывается впечатление, что ты не используешь "могучего ключа" к офисным программам: запись действий в макросы)
OleVariant line=wdLine;
Selection->MoveDown(line,5);
Wrd=CreateOleObject("Word.Application");
Variant currentDoc = Wrd.OlePropertyGet("ActiveDocument");
Variant Shapes = currentDoc.OlePropertyGet("Shapes");
Function AddPic("AddPicture");
Shapes.Exec( AddPic << WideString("Test.bmp"));
AddPic.ClearArgs();
Чтобы поместить картинку, например, после таблицы, или после 5 строки документа, была перепробована масса возможностей, естественно, включая и Selection, но безуспешно.
Все равно вставляется только в самое начало:(
а не работающие TWord... компоненты, то почему бы тебе не воспользоваться "классическим" примером из
Borland\CBuilder6\Examples\Doc\OLEWord1\
- там вместо Word.Application юзают Word.Basic