с нескольких Stringgrid в Word

Тема в разделе "Delphi - Компоненты", создана пользователем Milanam, 18 июн 2011.

  1. Milanam

    Milanam Гость

    Каким образом можно перенести данные с нескольких StringGrid в Word, на один лист

    Добавлено: и как можно добавить текст до или после таблицы?
     
  2. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Прямо таки на один? А если на один не влезут? :rolleyes:
    цепляемся к Word
    Код (Delphi):
    var
    App,Doc: OleVariant;
    //...
    App := CreateOleObject('Word.Application');
    Doc := App.Documents.Add; // Doc := App.Documents.Add(fileName, EmptyParam);
    переход селекшена на нужный лист
    Код (Delphi):
    var
    What, Which, Count, Name: OleVariant;
    //...
    What := wdGoToPage;
    Which := wdGoToPrevious; // wdGoToNext
    Count := 2;
    Name := unAssigned;
    App.Selection.Goto(What, Which, Count, Name);
    вставка таблицы из стринггрида
    Код (Delphi):
     Cols := StringGrid1.ColCount;
    Rows := StringGrid1.RowCount;
    Table := Doc.Tables.Add(App.Selection.Range, Cols, Rows);

    for i := 1 to Rows do
    for j := 1 to Cols do
    Table.Cell(i, j).Range.Text := StringGrid1.Cells[j - 1, i - 1];
    //...
    Selection.Start := Table.Range.End+1;
    Selection.Collapse();
    Selection.Range.InsertAfter('Текст после первой таблицы');
    Код (Delphi):
    Table := Doc.Tables(2);
    Table.Range.InsertBefore('Текст перед 2-й таблицей');
     
  3. Milanam

    Milanam Гость

    что то с Selection ошибка выходит?(
     
  4. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    это вопрос? к нам? :rolleyes:
    и где?) там использование App.Selection не помогает? или, может, надо что-то типа App.Visible := True
     
  5. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Это бывает... когда несколько документов открыто...
    Можно вот так попробовать:
    Код (Delphi):
     What := wdGoToPage;
    Which := wdGoToPrevious; // wdGoToNext
    Count := 2;
    Doc.ActiveWindow.Selection.GoTo(What,Which,Count);
    А лучше даже наверное вот так
    Код (Delphi):
     What := wdGoToPage;
    Which := wdGoToNext;
    Name := unAssigned;
    Count := 1;
    Doc.ActiveWindow.Selection.Start := Doc.GoTo(What,Which,Count).Start; // Это смещение на 1 стр. относительно начала документа
    // т.е селекшн ставится в начало 2-й страницы
    А вообще, правильнее будет использвать раннее связывание.
    Для этого нужно импортнуть объектную модель Word-а.
    1. Меню Project->Import Type Library
    2. Выбрать Microsoft Word 1x.0 Object Library
    3. Нажать Create Unit.
    Использовать так
    Код (Delphi):
    uses
    ComObj, Office_TLB, Word_TLB, Variants;
    //...
    var
    Doc: WordDocument;
    App: TWordApplication;
    Tbl : Table;
    //...
    App := TWordApplication.Create(nil);
    App.ConnectKind := ckRunningOrNew;
    App.Connect;
    App.Visible := True;

    Doc := App.Documents.AddOld(EmptyParam,EmptyParam); // Doc := App.Documents.Add(fileName, EmptyParam,EmptyParam,EmptyParam);

    Cols := StringGrid1.ColCount;
    Rows := StringGrid1.RowCount;

    Tbl := Doc.Tables.AddOld(Doc.ActiveWindow.Selection.Range, Cols, Rows);
    Ну и далее фактически все тоже самое (в смысле кода).
     
Загрузка...

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