• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Milanam

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

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

sinkopa

Каким образом можно перенести данные с нескольких 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-й таблицей');
 
S

sinkopa

что то с 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);
Ну и далее фактически все тоже самое (в смысле кода).
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!