Topic: вставить изображение в word документ
Всем Добрый
Кто нибудь уже задавался вопросом вставки изображение с таблицы в word документ?
На данный момент имеется таблица Client, в таблице колонка Photo
Я использую SQLQuery для заготовленного уже шаблона word, для последующей замены текста шаблона на данные с таблицы
Само собой функция Word.FindAndReplace ругается на слишком длинный строковый параметр в замене {Photo}
может кто знает и может подсказать какую функцию правильно будет использовать или пример?
procedure PrintClient(idClient: integer);
var
Word: TWord;
sName, sAddress, sPhone, sEmail: string;
sWordTemp: string;
sWordFinal: string;
ResultsPhotoClient: TDataSet;
ResultsClient: TDataSet;
begin
SQLQuery('SELECT Photo, Photo_filename FROM Client WHERE Client.id='+IntToStr(idClient), ResultsPhotoClient);
SQLQuery('SELECT ClientName FROM Client WHERE Client.id='+IntToStr(idClient), ResultsClient);
sWordTemp := ExtractFilePath(Application.ExeName)+'\WordTemplate\template2.doc';
sWordFinal := GetEnvironmentVariable('TEMP') + '\'+ResultsClient.FieldByName('ClientName').AsString+' - '+FormatDateTime('dd.mm.yyy', now)+'.doc';
CopyFile(sWordTemp, sWordFinal);
Word := TWord.Create;
Word.Visible := True;
Word.Open(sWordFinal);
Word.FindAndReplace('{Photo}', ResultsPhotoClient.FieldByName('Photo').AsString );
Word.FindAndReplace('{ClientName}', ResultsClient.FieldByName('ClientName').AsString );
на просторах интернета нашел вот такой образец, но пока не удается прикрутить в MVD
uses
ComObj;
procedure TForm1.Button1Click(Sender: TObject);
const
//Имя файла шаблона и изображения.
FnDoc = 'Шаблон.doc';
FnPic = 'Изображение.bmp';
//Продолжить поиск.
wdFindContinue = 1;
//Виды расположения текста относительно изображения.
wdWrapInline = 7;
wdWrapNone = 3;
wdWrapSquare = 0;
wdWrapThrough = 2;
wdWrapTight = 1;
wdWrapTopBottom = 4;
var
wdApp, wdDoc, wdRng, wdSh : Variant;
FNameDoc, FNamePic : String;
Cnt : Integer;
begin
//Путь к файлу шаблона. Предполагаем, что файл шаблона лежит в папке с программой.
FNameDoc := ExtractFilePath(ParamStr(0)) + FnDoc;
if not FileExists(FNameDoc) then begin
MessageBox(0, 'Файл шаблона не найден. Действие отменено.',
'Ошибка', MB_OK + MB_ICONERROR + MB_APPLMODAL);
Exit;
end;
//Путь к файлу изображения. Предполагаем, что файл изображения лежит в папке с программой.
FNamePic := ExtractFilePath(ParamStr(0)) + FnPic;
if not FileExists(FNamePic) then begin
MessageBox(0, 'Файл изображения не найден. Действие отменено.',
'Ошибка', MB_OK + MB_ICONERROR + MB_APPLMODAL);
Exit;
end;
//Запуск MS Word и подключение к его корневому объекту.
try
wdApp := CreateOleObject('Word.Application');
except
MessageBox(0, 'Не удалось запустить MS Word. Действие отменено.',
'Ошибка', MB_OK + MB_ICONERROR + MB_APPLMODAL);
Exit;
end;
wdApp.Visible := True;
wdApp.DisplayAlerts := False; //Отключить режим показа предупреждений.
try
wdDoc := wdApp.Documents.Open(FNameDoc);
wdRng := wdDoc.Content; //Диапазон, охватывающий всё содержимое документа.
//Настройка поиска.
wdRng.Find.ClearFormatting;
wdRng.Find.Text := '<PICTURE>';
//True - начать поиск сначала документа.
wdRng.Find.Forward := True;
//wdFindContinue - продолжать поиск "по кругу" с текущего места.
wdRng.Find.Wrap := wdFindContinue;
//False - не учитывать регистр букв.
wdRng.Find.MatchCase := False;
//False - шаблон может не являться отдельным словом.
wdRng.Find.MatchWholeWord := False;
//Поиск шаблона и замена его на изображение.
Cnt := 0;
while wdRng.Find.Execute do begin
Inc(Cnt);
//Стираем найденный текст.
wdRng.Text := '';
//Поиск следующего совпадения начинать с текущего места.
if Cnt = 1 then wdRng.Find.Forward := False;
//Создаём фигуру с изображением. Изображение грузим из файла и привязываем
//его к началу найденного диапазона.
wdSh := wdDoc.Shapes.AddPicture(FileName:=FNamePic,
LinkToFile:=False, SaveWithDocument:=True, Anchor:=wdRng);
//На всякий случай добавляем вверху диапазона (перед картинкой) знаки
//перевода строки.
wdRng.InsertBefore(#13#10);
//Расположение текста вокруг изображения: wdWrapTopBottom - только сверху и снизу.
wdSh.WrapFormat.Type := wdWrapTopBottom
end;
finally
wdApp.DisplayAlerts := True; //Включение режима показа предупреждений.
end;
end;