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

  • Автор темы Milanam
  • Дата начала
M

Milanam

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

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

sinkopa

Well-known member
17.06.2009
344
4
#2
Каким образом можно перенести данные с нескольких StringGrid в Word, на один лист
Прямо таки на один? А если на один не влезут? :rolleyes:
цепляемся к Word
Код:
var
App,Doc: OleVariant;
//...
App := CreateOleObject('Word.Application');
Doc := App.Documents.Add; // Doc := App.Documents.Add(fileName, EmptyParam);
переход селекшена на нужный лист
Код:
var
What, Which, Count, Name: OleVariant;
//...
What := wdGoToPage;
Which := wdGoToPrevious; // wdGoToNext
Count := 2;
Name := unAssigned;
App.Selection.Goto(What, Which, Count, Name);
вставка таблицы из стринггрида
Код:
 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('Текст после первой таблицы');
Добавлено: и как можно добавить текст до или после таблицы?
Код:
Table := Doc.Tables(2);
Table.Range.InsertBefore('Текст перед 2-й таблицей');
 

sinkopa

Well-known member
17.06.2009
344
4
#5
что то с Selection ошибка выходит?(
Это бывает... когда несколько документов открыто...
Можно вот так попробовать:
Код:
 What := wdGoToPage;
Which := wdGoToPrevious; // wdGoToNext
Count := 2;
Doc.ActiveWindow.Selection.GoTo(What,Which,Count);
А лучше даже наверное вот так
Код:
 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.
Использовать так
Код:
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);
Ну и далее фактически все тоже самое (в смысле кода).