Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Работа с компонентами Word


Автор: rugo 24.3.2008, 21:39
Всем добрый день.
У меня такая проблема.
Пытаюсь разобраться с компонентами типа Word на вкладке Office2k.В интернете очень мало информации на эту тему.Все советуют запускать макросы в Word и переносить VBA-код в С++.
Как создать таблицу я понял.
Код

WordDocument1->Tables->Add(WordDocument1->Range(EmptyParam, EmptyParam), 4, 5);

Проблема в том,что она создается не тем стилем.В макросе VBA должен быть стиль "Сетка таблицы"
Код

Sub Макрос2()
'
' Макрос2 Макрос
' Макрос записан 24.03.2008 Admin
'
    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
End Sub

У меня не получается изменить стиль в С++.
Подскажите как победить проблему.

Автор: mrbrooks 24.3.2008, 21:51
здесь можно поступить двумя способами имхо:
1. Качнуть или правильнее купить книгу Архангельского -  программирования в Билдере. Там про эти компоненты сказано. Впринципе есть еще хелп. 
2. пользоваться не компонентами а OLE-сервером - впринципе тоже достаточно эротично. Для начала почитай http://wladm.narod.ru/Borland/word.html. 



Автор: rugo 27.3.2008, 14:59
Цитата(mrbrooks @  24.3.2008,  21:51 Найти цитируемый пост)
пользоваться не компонентами а OLE-сервером

Спасибо за ссылку.
Таблицы я создавать научился.Теперь хочу добавить в документ колонтитулы.
Макрос Word выдал следующее:
Код

    If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveWindow.Panes(2).Close
    End If
    If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
        ActivePane.View.Type = wdOutlineView Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    Selection.TypeText Text:="Ghyuio"
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument

Как это будет на С++?

Автор: petlyura 28.3.2008, 09:19
Я не переводил с VBA на C++ приведенное выше, но я добавляю в колонтитул надписи так:

WideString SS (caption); //caption - это строка, добавляемая в колонтитул (тип AnsiString)
   // переходим на колонтитул
  WordApp->ActiveWindow->ActivePane->View->SeekView = wdSeekCurrentPageHeader;
  WordApp->Selection->InsertAfter(SS.c_bstr());

  WFont->set_Size(14);  //шрифты
  WFont->set_Bold (1);

  WParagraphFormat->set_Alignment(wdAlignParagraphCenter); //центрируем
  WordApp->Selection->HeaderFooter->PageNumbers->Add((OleVariant)wdAlignPageNumberRight, (OleVariant)true);
  WordApp->Selection->Collapse(D);
  // возвращаемся в документ из колонтитула
  WordApp->ActiveWindow->ActivePane->View->SeekView = wdSeekMainDocument;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)