Delphi word как вставить картинку

У меня имеется большое количество текста в тексотвых файлах.
Требуется через Delphi, заменить текст на картинки, то есть каждый символ заменить на определенную картинку и ввести эти картинки в .doc файл.

Возможно ли вообще такое?

Как записать компонент image в doc?

Deleted's user avatar

Deleted

3611 золотой знак5 серебряных знаков13 бронзовых знаков

задан 23 ноя 2012 в 11:20

Вячеслав93's user avatar

Вполне возможно.

Через OLE

Разбейте свою задачу на этапы:

1 Открыть документ Word через Delphi

2 Получить текст из активного документа Word

3 Вставить картинку в Word

Линк для пункта 1 и 2 Создать из Delphi документ MS Word

Линк для пункта 3 Image Delphi Word

ответ дан 23 ноя 2012 в 11:29

Rsecomua's user avatar

RsecomuaRsecomua

4,24312 серебряных знаков17 бронзовых знаков

В раздел программы Uses подключаем модуль ComObj. Для запуска Word запишем следующее:

procedure TForm1.Button1Click(Sender: TObject);

var

Word: variant;

begin

try

Word := CreateOleObject(‘Word.Application’);

except

ShowMessage(‘Не могу запустить Microsoft Word’);

end;

Word.Visible := True;

Word.Documents.Add;

end;

Как нарисовать линию в Word в Delphi:

Word.ActiveDocument.Shapes.AddLine(x1, y1, x2, y2);

Как нарисовать прямоугольник в Word в Delphi:

Word.ActiveDocument.Shapes.AddShape(1, x1, y1, x2, y2);

Как вставить изображение в Word в Delphi:

Word.Selection.InlineShapes.AddPicture(FileName:=‘C:test.bmp’, LinkToFile:=False, SaveWithDocument:=True);


    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.


    Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
    1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
    2. Как «свернуть» программу в трей.
    3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
    4. Как прочитать список файлов, поддиректорий в директории?
    5. Как запустить программу/файл?
    … (продолжение следует) …


    Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
    Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


    Внимание
    Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
    Повторная попытка — 60 дней. Последующие попытки бан.
    Мат в разделе — бан на три месяца…

    >
    Как вставить в Word-документ изображение
    , вопрос

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему

      


    Сообщ.
    #1

    ,
    23.11.04, 18:17

      т.е. картинку из какого-нибудь файла (*.jpeg, *.Bmp и т.д.). С помощью OLE-автоматизации.
      И сразу еще один вопрос. Может кто знает где можно скачать инфы по данной теме.
      Очень нужно! :wall:

      Сообщение отредактировано: Analitic — 23.11.04, 18:19


      $im



      Сообщ.
      #2

      ,
      23.11.04, 18:58

        ExpandedWrap disabled

          uses

           ComObj, ActiveX;

          var

           Word, Sel: variant;

           FileName: string;

           LinkToFile, SaveWithDocument: boolean;

          begin

           Word:=CreateOleObject(‘Word.Application’);

           Word.Documents.Add;

           sel:=Word.Selection;

           Sel.InlineShapes.AddPicture(FileName, LinkToFile, SaveWithDocument);

           Word.Visible:=true;

          end;

        где FileName — адрес картинки, LinkToFile — связывать ли с документом, SaveWithDocument — сохранять ли картинку с документом.
        Вообще, все вопросы, касающиеся OLE можно решить с помощью VBA. Записываете скрипт действия, которое вас интересует и затем анализируете получившийся макрос.

        Сообщение отредактировано: $im — 23.11.04, 19:00


        Jureth



        Сообщ.
        #3

        ,
        24.11.04, 05:38

          Только вот Selection лучше не юзать — мало-ли что там выделится. А help по VBA — полезная вещь, но конкретно про OLE там, к сожалению, ничего нету.


          Analitic

            


          Сообщ.
          #4

          ,
          24.11.04, 15:03

            to Sim:

            Огромное спасибо! Без этой байды мой проект по информатике завалить могли бы. Спас ты меня, можно сказать.

            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

            0 пользователей:

            • Предыдущая тема
            • Delphi: Общие вопросы
            • Следующая тема

            Рейтинг@Mail.ru

            [ Script execution time: 0,0203 ]   [ 16 queries used ]   [ Generated: 13.04.23, 22:38 GMT ]  

             
            MisterX
             
            (2014-05-26 13:42)
            [0]

            Всем привет!
            Прошу вашей помощи. Нужно картинку image1 вставить в ячейку (1,1) таблицы Ворд нажав кнопочку! Потом другую картинку image1 в ячейку (1,2)! Потом следующую картинку в ячейку (3,1) и т.д.
            Помогите пожалуйста, как можно это реализовать.
            Заранее благодарю!


             
            sniknik ©
             
            (2014-05-26 13:47)
            [1]

            > Помогите пожалуйста, как можно это реализовать.
            универсально, для офиса, переведя созданный «руками» макрос.

            Sub Макрос3()
            «
            » Макрос3 Макрос
            » Макрос записан 26.05.2014 ws-131
            «
               ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:= _
                   5, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
                   wdAutoFitFixed
               With Selection.Tables(1)
                   If .Style <> «Сетка таблицы» Then
                       .Style = «Сетка таблицы»
                   End If
                   .ApplyStyleHeadingRows = True
                   .ApplyStyleLastRow = True
                   .ApplyStyleFirstColumn = True
                   .ApplyStyleLastColumn = True
               End With
               Selection.InlineShapes.AddPicture FileName:= _
                   «C:Documents and SettingsxxxxМои документыМои рисунки3123142.JPG» _
                   , LinkToFile:=False, SaveWithDocument:=True
            End Sub


             
            sniknik ©
             
            (2014-05-26 13:52)
            [2]

            +
            раз уж фигурирует «таблица» то лучше использовать excel.


             
            MisteX
             
            (2014-05-26 14:27)
            [3]

            Нужно чтоб автоматически вставлялась картинка


             
            sniknik ©
             
            (2014-05-26 14:33)
            [4]

            чудес не бывает… сначала все одно придется сделать «руками», после руками же запрограммировать понятое, руками запустить полученную программу (настроить любой «авто») … и вот потом, программа, что нибудь сделает «автоматически», например вставит картинку.

            или думал в сказке живешь? типа спросил, и золотая рыбка раз тебе готовый код… не, так не бывает.


             
            MisteX
             
            (2014-05-26 14:35)
            [5]

            я знаю как одну картинку вставить!


             
            sniknik ©
             
            (2014-05-26 14:39)
            [6]

            тогда открою страшную тайну… чтобы вставить две нужно повторить действие для одной, первой, но указать другую. чтобы 3… ну и т.д.


             
            oldman ©
             
            (2014-05-26 14:40)
            [7]


            > sniknik ©   (26.05.14 13:47) [1]

            Не трать время…
            http://delphimaster.net/view/2-1400830587/


             
            sniknik ©
             
            (2014-05-26 14:42)
            [8]

            ;(


             
            MisteX
             
            (2014-05-26 14:49)
            [9]

            sniknik, а если у тебя 200 картинок?


             
            junglecat
             
            (2014-05-26 14:55)
            [10]

            > если у тебя 200 картинок?

            надо 200 раз сделать ctrl+c / ctrl+v кода из [1]


             
            MisteX
             
            (2014-05-26 14:59)
            [11]

            oldman с ACol и ARow понятно. Как забить переменную чтоб получилась то что нужно?

            procedure TForm1.Button2Click(Sender: TObject);
            begin
            for i:=0 to 100 do
            for j:=0 to 1 do
            begin
            ClipBoard.Assign(Image1.Picture);
            App.ActiveDocument.Tables.Item(1).Cell(i,j).Selection.Paste;
            end;
            end;

            Начало верное?


             
            MisteX
             
            (2014-05-26 15:00)
            [12]

            junglecat а если Вы не знаете сколько их будет?


             
            sniknik ©
             
            (2014-05-26 15:02)
            [13]

            > sniknik, а если у тебя 200 картинок?
            плевать. программируешь любой алгоритм вставки (нормально с параметрами, а не хардкодя позиции ячеек), + цикл на n-раз… хотя не, n мало, m раз!


             
            sniknik ©
             
            (2014-05-26 15:08)
            [14]

            > Начало верное?
            нет, «хардкод» картинки, ее тоже нужно менять, и лучше из файла ([1]) а не клипборда.


             
            MisteX
             
            (2014-05-26 15:17)
            [15]

            блондинкой себя чувствую:(


             
            MisteX
             
            (2014-05-26 15:21)
            [16]

            procedure TForm1.Button2Click(Sender: TObject);
            i,j,N:Integer;
            begin
            for i:=0 to N do
            for j:=0 to 1 do
            begin

            end;
            end;

            Как вставить картинку в ячейку (1,1) например? Всего 2 столбца, 5 строк


             
            sniknik ©
             
            (2014-05-26 15:39)
            [17]

            примерно так (код написан прямо здесь без проверки)
            for i:=0 to N do
             for j:=0 to 1 do
               App.ActiveDocument.Tables.Item(1).Cell(i,j).InlineShapes.AddPicture(FileName:= MakeFileName(i,j)+».JPG», LinkToFile:=False, SaveWithDocument:=True);

            твоя функция MakeFileName — тут по i, j должно определятся имя вставляемого файла. зависимость должна быть, если нету сделай ее.


             
            sniknik ©
             
            (2014-05-26 15:40)
            [18]

            упс Selection случайно вырезал… ну неважно.


             
            MisteX
             
            (2014-05-26 15:47)
            [19]

            Видел другую тему, там некий SkyWalker писал. Что-то подобное нужно.
            То есть что я уже сделал:
            в комбобокс выбираю имя файла, на имэйж1 появляется соответсвующая картинка.
            и вот ее нужно при помощи Button1 вставить в ячейку 1,1 например.
            потом выбираю в комбо другое имя файла, на имэйдж появляется соответствующая картинка, тык Button, она в ячейке 1,2.
            и т.д.
            Вот как это сделать?
            Или у меня лыжи не едут?:)


             
            sniknik ©
             
            (2014-05-26 15:58)
            [20]

            Palladin ©   (23.05.14 18:03) [45]
            > Бездарная потеря времени.
            +1


             
            MisteX
             
            (2014-05-26 16:02)
            [21]

            почему?:(


             
            sniknik ©
             
            (2014-05-26 16:08)
            [22]

            «показания» меняются по ходу. то нужен список, то уже по одному выбирать (а как же про 200-раз? + одну то говорил можешь, и в чем теперь проблема? вот оно выбор всегда по одной…).
            не реализуемо.
            есть единственный вариант, но никто на него не согласен — нанять программиста. ОЧЕНЬ дорого, т.к. такая же непоследовательность будет и в ТЗ.


             
            MisteX
             
            (2014-05-26 16:33)
            [23]

            блин((( думал здесь помогут(((
            Спасибо большое всем:) в таком случае не буду заморачиваться)))


             
            sniknik ©
             
            (2014-05-26 16:47)
            [24]

            > блин((( думал здесь помогут(((
            здесь именно что помогают, с конкретными проблемами/неясностями, а делать предполагается должен все таки автор.
            ты же явно думал о чем-то другом, т.к. на помощь не реагировал, ждал чего-то другого.

            > в таком случае не буду заморачиваться)))
            хэпи энд.
            и вам не хворать.


             
            brother ©
             
            (2014-05-26 17:01)
            [25]

            [19] ага, это ты и есть… и комбобоксы и ворд, все как у него и у Вас) …


             
            Inovet ©
             
            (2014-05-26 18:47)
            [26]

            > [5] MisteX   (26.05.14 14:35)
            > я знаю как одну картинку вставить!

            Это ты третий раз за месяц говоришь. Допустим, знаешь. Тогда в чём проблема вставить несколько неняя в цикле координаты (номер) ячейки? С диска получить нужные файлы? Тогда см функции
            FindFirst
            FindNext
            FindClose
            Пример есть в справке.


             
            Inovet ©
             
            (2014-05-26 18:48)
            [27]

            > [26] Inovet ©   (26.05.14 18:47)
            > Это ты

            В смысле — тот Скайвокер и ты говорите.


            Like this post? Please share to your friends:
          • Delphi word to pdf
          • Delphi select from excel
          • Delphi range в excel что такое
          • Delphi interface not supported excel
          • Delphi if excel cell