Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 12.06.2014, 18:15   #1
leejack
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 21
Репутация: 10
По умолчанию Вывод данных в MS word в нужном порядке

Добрый день, уважаемые форумчане!
Появилась непонятная проблема с выводом информации в ворд

Вообщем мне нужно вывести заголовок а за ним таблицу с данными
Но ничего не выходит. Свеже созданная таблица автоматически появляется сверху( выводил в разном порядке-итог один, ниже код, он уже модернизирован и 100 раз изменен((

Код:
procedure TForm1.Button4Click(Sender: TObject);
  var
      i, j : integer;
      wdApp, wdDoc, wdRng : Variant;
      TableReport : Table;
      TableRange : range;
begin
  //-------------Создаем ворд документ--------------
  try
    wdApp := CreateOleObject('Word.Application');
    //msWord.ActiveDocument.PageSetup.Orientation :=1;
  except
    ShowMessage('Не могу запустить Microsoft Word');
  end;
  //------------------------------------------------
  wdApp.Visible := True;
  //Создаём новый документ.
  wdDoc := wdApp.Documents.Add;
  //Отключение перерисовки окна MS Word. - Для ускорения работы.
  wdApp.ScreenUpdating := False;
  try
    wdRng := wdDoc.Range;
    wdApp.ActiveDocument.PageSetup.Orientation :=1;
 
    //Первый текст.
    wdRng.InsertBefore('Отчет по судебным делам по состоянию на дату  ' + DateTimeToStr(Now));
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := True;
    wdRng.Font.Size := 20;
    //Выравнивание по центру.
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
    //Добавляем перевод строки.
    wdRng.InsertAfter(#13#10#13#10);
 
    //Формируем новый диапазон непосредственно за текущим диапазоном.
    wdRng.Start := wdRng.End;
    //Сброс параметров параграфа.
    wdRng.ParagraphFormat.Reset;
    //Сброс параметров шрифта.
    wdRng.Font.Reset;
    //Добавляем два перевода строки.
 
    except
    end;
 
 
    wdApp.ActiveDocument.Tables.Add (wdApp.Selection.Range, DataModule2.ADOQuery1.RecordCount+1 , DBGrid1.Columns.Count);
    wdApp.ScreenUpdating := True;
leejack вне форума   Ответить с цитированием
Старый 12.06.2014, 19:41   #2
leejack
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 21
Репутация: 10
По умолчанию

Неужели нет ни одной идеи?(
leejack вне форума   Ответить с цитированием
Старый 12.06.2014, 22:28   #3
Человек_Борща
Профессионал
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Адрес: Республика Беларусь, г. Минск
Сообщений: 11,432
Репутация: 2785
По умолчанию

Шаблон в RTF решает проблему и полного отсутствия MS Word и не убирает все красоты документа.
Человек_Борща вне форума   Ответить с цитированием
Старый 12.06.2014, 22:37   #4
leejack
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 21
Репутация: 10
По умолчанию

Ну шаблон это одно, мне нужно именно файл ворд с нуля создать. И не таскать за собой шаблоны. Еще варианты?
leejack вне форума   Ответить с цитированием
Старый 12.06.2014, 23:35   #5
Человек_Борща
Профессионал
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Адрес: Республика Беларусь, г. Минск
Сообщений: 11,432
Репутация: 2785
По умолчанию

Копать в строну VBA и пробовать что называется "из коробки".
И так, у вас есть таблица. Таблица это 2 части - горизонтальная шапка, она статическая. Пишем её 1 раз. Данные таблицы - динамическая часть.

Вот и делайте таким алгоритом:
Создаем файл
Пишем заголовок таблицы
<Цикл по строкам таблицы>
профит.
Человек_Борща вне форума   Ответить с цитированием
Старый 13.06.2014, 00:32   #6
Samkoff
Пользователь
 
Регистрация: 04.03.2011
Сообщений: 18
Репутация: 10
По умолчанию

Может быть поможет, у меня немного другая задача, я опрашиваю все таблицы программы и все это дело печатаю в ворд.
Эта процедура висит на кнопке.
Код:
procedure TForm1.N12Click(Sender: TObject);
begin
//создаем документ
  try
    wdApp := CreateOleObject('Word.Application');
    wdApp.Visible := True;
  except
    ShowMessage('Не удалось запустить MS Word. Действие отменено.');
    Exit;
  end;

    //Делаем видимым и активным окно MS Word.
    wdApp.Visible := true;
    wdApp.Activate;

    //Ссылка на коллекцию документов.
    wdDocs := wdApp.Documents;
    wdDoc := wdDocs.Add;
    wdDoc.Range.InsertAfter('Парсинг 1  ');
    Parsing := 1;
    Analysis.Button1.Click;
    ExpToWord (Analysis.MStringGrid1);
    Analysis.Button2.Click;
    ExpToWord (Analysis.MStringGrid1);
    wdDoc.Range.InsertAfter('Парсинг 2  ');
    Parsing := 2;
    Analysis.Button1.Click;
    ExpToWord (Analysis.MStringGrid1);
    Analysis.Button2.Click;
    ExpToWord (Analysis.MStringGrid1);
....

    wdApp := Unassigned;
    wdDocs := Unassigned;
    wdDoc := Unassigned;
А вот эта процедура рисует в ворде. Все таблицы у меня друг за другом.
Код:
procedure ExpToWord (SG: TStringGrid);
var
  wdTable: OLEVariant;
  Row, Col: Integer;
begin
    wdApp.Selection.Font.Size := 12;
    wdApp.Selection.Font.Name  := 'Times New Roman';

    //создание таблицы
    wdTable := wdDoc.Tables.Add(
      Range:=wdDoc.Range.Characters.Last,
      NumRows:=SG.RowCount,
      NumColumns:=SG.ColCount);
      wdDoc.Range.InsertAfter(#13);


  for Row := 1 to SG.RowCount do
    for Col := 1 to SG.ColCount do
        wdTable.Cell(Row, Col).Range.Text := SG.Cells[ Col-1, Row-1 ];

  wdTable.Borders.Enable := true;
  wdApp.ActiveDocument.Tables.Item(1).AutoFitBehavior(wdAutoFitContent);
  wdApp.ActiveDocument.Paragraphs.SpaceAfter := 0;
  wdApp.ActiveDocument.Paragraphs.SpaceBefore := 0;

end;
Надеюсь поможет
Samkoff вне форума   Ответить с цитированием
Старый 14.06.2014, 18:21   #7
phomm
personality
Профессионал
 
Аватар для phomm
 
Регистрация: 28.04.2009
Адрес: Тюмень
Сообщений: 2,855
Репутация: 1511

icq: 421049471
skype: phomm-
По умолчанию

Пользуемся поиском по форуму, обсуждалось много раз, вариантов много. Например, мой пост в теме, создание таблицы с нуля:
http://programmersforum.ru/showthread.php?t=258035
phomm вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод из БД в обратном порядке Parallelogram PHP 10 22.05.2014 07:35
Вывод результата в нужном диве limon142 JavaScript, Ajax 6 15.03.2014 14:56
Запрос возвращающий строчки в нужном порядке Arassir SQL, базы данных 3 18.05.2012 09:38
Вывод данных из Access в Word GROSS777 БД в Delphi 1 22.11.2011 13:32
[C++] Вывод в алфавитном порядке? sailol Помощь студентам 6 27.04.2009 21:37


19:44.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru