Экспорт данных в MS Word

Тема в разделе "Delphi - СОМ", создана пользователем -, 19 май 2004.

Статус темы:
Закрыта.
  1. Гость

    Доброго времени суток!

    Кто-нибудь владеет навыками экспорта данных в MS Word? У меня есть код, передающий данные таблицы в текстовый редактор Word97. Может быть у кого-либо найдется код, который будет совместим и с другими версиями Word – 2000/XP?

    Код (Text):
    procedure TFormOff.BtnWordClick(Sender: TObject);
    var
    Bookmark: TBookmark;
    RangeW: Word97.Range;
    v1: Variant;
    ov1: OleVariant;
    Row1: Word97.Row;
    begin
    WordDocument1.Activate;
    WordDocument1.Range.Text := 'American Capitals from ' + Table1.TableName;
    WordDocument1.Range.Font.Size := 14;
    Table1.DisableControls;
    try
     Bookmark := Table1.GetBookmark;
     try
      Table1.First;
      while not Table1.EOF do
      begin
       WordDocument1.Range.InsertParagraphAfter;
       WordDocument1.Paragraphs.Last.Range.Text :=
        Table1.FieldByName ('Name').AsString + #9 +
        Table1.FieldByName ('Capital').AsString;
       Table1.Next;
      end;
     finally
      Table1.GotoBookmark (Bookmark);
      Table1.FreeBookmark (Bookmark);
     end;
    finally
     Table1.EnableControls;
    end;
    RangeW := WordDocument1.Content;
    v1 := RangeW;
    v1.ConvertToTable (#9, 19, 2);
    Row1 := WordDocument1.Tables.Item(1).Rows.Get_First;
    Row1.Range.Bold := 1;
    Row1.Range.Font.Size := 30;
    Row1.Range.InsertParagraphAfter;
    ov1 := ' ';
    Row1.ConvertToText (ov1);
    end;
     
  2. admin

    admin Well-Known Member

    Регистрация:
    8 авг 2003
    Сообщения:
    2.811
    Симпатии:
    0
    Джангл Виталий
    Под 2000/XP компоненты другие идут.
     
  3. 2002

    2002 Гость

  4. Гость

    Спсибо за помощь! Я уже допетрил сам, иначе бы я давно лишился работы =)
     
  5. admin

    admin Well-Known Member

    Регистрация:
    8 авг 2003
    Сообщения:
    2.811
    Симпатии:
    0
    Джангл Виталий
    можно вот как
    Если используешь шаблон, то вариант такой:
    1. В шаблоне Word'a в нужные места расставляешь Bookmark (Insert->Bookmark).
    2. В проге позиционируешь на этот букмарк и пишешь данные.

    Код (Text):
    (WrdApp - TWordApplication)

    procedure TfrmPToClient.bbCreateClick(Sender: TObject);
    var
    InvoiceTemplate: OleVariant;
    begin
    // Соединение с OLE-сервером
    WrdApp.Connect;
    WrdApp.Visible := True;
    // выбор шаблона
    if not FileExists(dlgOpen.FileName) then
     Exit;
    InvoiceTemplate := edFileName.Text;
    // открытие выбраного шаблона в Word'e
    WrdApp.Documents.Add(InvoiceTemplate, EmptyParam);
    WordGotoBookmark('PDate');
    WordInsertText(' ' + DateToStr(dtpPDate.Date));
    WordGotoBookmark('PNr');
    WordInsertText(' ' + edPNr.Text);
    WordGotoBookmark('PClientName');
    WordInsertText(' ' +
     dmIB_TOIS.tblProject.FieldByName('ProjectClientName').asString);
    WordGotoBookmark('ContractNr');
    WordInsertText(' ' + dmIB_TOIS.tblProject.FieldByName('CLWordGotoBookmark('
     ContractDate');
     WordInsertText(' ' +
      dmIB_TOIS.tblProject.FieldByName('CL_ContractDate').asString);
     WordGotoBookmark('PCargoName');
     WordInsertText(' ' +
      dmIB_TOIS.tblProjectCargo.FieldByName('CargoName').asString);
     WordGotoBookmark('PProjectYear');
     WordInsertText(' ' +
      dmIB_TOIS.tblProject.FieldByName('PROJECTNOTICEYEAR').asString);
     WordGotoBookmark('PProjectMonth');
     WordInsertText(' ' +
      arMonths[dmIB_TOIS.tblProject.FieldByName('PROJECTNOTICEMonth').asInteger]);
    end;

    procedure TfrmPToClient.WordGotoBookmark(Bookmark: string);
    var
    What: OLEVariant;
    Which: OLEVariant;
    Count: OLEVariant;
    Name: OLEVariant;
    begin
    What := wdGoToBookmark;
    Which := unAssigned;
    Count := unAssigned;
    Name := Bookmark;
    WrdApp.Selection.GoTo_(What, Which, Count, Name);
    end;

    procedure TfrmPToClient.WordInsertText(Text: string);
    begin
    WrdApp.Selection.TypeText(Text);
    end;
    В случае, если нужно вывести набор записей (например в вордовскую таблицу), то вариант такой :
    1. В шаблоне Ворда рисуешь "болванку" таблицы, делаешь макрос вставки новой строки в таблицу и можно ещё простые макросы перехода по ячейкам таблицы.
    2. В проге позиционируешь через Bookmark на первую ячейку, далее в цикле вызываешь вордовский макрос создания новой строки и с помощью макросов перехода по ячейкам вбиваешь данные из набора.

    (с) Delphiworld
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей