Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2015, 10:56   #1
Nasle73
Пользователь
 
Регистрация: 09.05.2015
Сообщений: 11
По умолчанию Delphi БД - MS Access вывод таблицы в MS Word

Здравствуйте, уважаемые!
Возможно решение моей проблемы уже есть, но я его не нашел.

Для начала, что я сделал:
1) создал БД в Access (она содержит в себе 4 таблицы)
2) в delphi использую ADOConnection, ADOTable, DataSource, DBGrid
3) реализовал вывод данных из таблицы в DBGrid при открытии формы. так же реализовал, добавление новой строки, удаление старой строки, редактирование выбранной строки, через кнопки button.

То что я не могу сделать:
1) нужно при нажатии на button, чтобы в MS word в имеющимся шаблоне, формата .doc, которой уже содержит определенный текст, после текста формировать таблицу, аналогичную, которую отображает DBGrid. (те же столбцы и строки).

Прошу помощи. Примеры кодов похожих программ. Ссылки на литературу, где можно найти решение моей проблемы. Советы и возможно сами решения данной проблемы.
Nasle73 вне форума Ответить с цитированием
Старый 16.05.2015, 11:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Примеры кодов похожих программ.
http://www.programmersforum.ru/showthread.php?t=48859
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.05.2015, 11:46   #3
Nasle73
Пользователь
 
Регистрация: 09.05.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Огромное спасибо вам, что не остались равнодушным.
Попробовал изменить код из вашего примера.
Получилось так:
Код:
procedure TForm17.Button5Click(Sender: TObject);
var
 i,j,r:integer;
 s:WideString;
  Direction:OleVariant;
  Con : OleVariant;
  separat:String; 
d, separatOV, Column:OleVariant;
begin
WordApplication1.Connect;
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
 WordApplication1.Documents.Add(EmptyParam, EmptyParam,EmptyParam, EmptyParam);
WordApplication1.Selection.Collapse(D);
 Con:=7;

WordApplication1.Selection.MoveDown(EmptyParam, Con, EmptyParam);

WordApplication1.Selection.Collapse(D);
 D:=wdCollapseEnd;
Separat:='@'; 
separatOV:=separat;
Column:=7;

for i:=1 to 1 do
begin

WordApplication1.Selection.InsertAfter(DBGrid1.Columns[0].Title.Caption 
  + separat+ DBGrid1.Columns[1].Title.Caption
  + separat+DBGrid1.Columns[2].Title.Caption+DBGrid1.Columns[3].Title.Caption 
  + separat+DBGrid1.Columns[4].Title.Caption 
  + separat+DBGrid1.Columns[5].Title.Caption 
  + separat+ DBGrid1.Columns[6].Title.Caption 
+#13);
 DataModule11.ADOTable6.First;

 for r:=1 to  DataModule11.ADOTable6.RecordCount do
 begin

s:=DBGrid1.Fields[0].AsString+separat+DBGrid1.Fields[1].AsString+separat+DBGrid1.Fields[2].AsString+#13;
 DataModule11.ADOTable6.Next;
 end;
end;

WordApplication1.Selection.InsertAfter(s);

WordApplication1.Selection.ConvertToTableOld(separatOV, EmptyParam,
Column,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
 EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);

WordApplication1.Selection.Collapse(D);

WordApplication1.Visible:=true;

end;
В итоге формирует шапку, вроде как правильно. Но, формирует только когда открыт какой либо водовский документ. Причем формирует не в этом открытом документе, а создает новый и формирует в нем. И строки формирует не правильно. Он вывел только половину 3тей строки. А нужно все. Причем нужно, чтобы выводились все строки сколько их будет, а не сколько сейчас. Если ни открыто не одного документе на ПК, выходит ошибку с текстом, что не открыт ни один документ. А мне нужно чтобы он сам открывал нужный мне документ и формировал в нем таблицу.

Прикрепил скрины.
Изображения
Тип файла: jpg 1.JPG (30.1 Кб, 127 просмотров)
Тип файла: jpg 2.JPG (63.7 Кб, 128 просмотров)

Последний раз редактировалось Stilet; 16.05.2015 в 11:50.
Nasle73 вне форума Ответить с цитированием
Старый 16.05.2015, 11:55   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
WordDocument1.ConnectTo(WordApplica tion1.ActiveDocument);
Зачем это? Убери. В примере используется CreateOleObject('Word.application') ; в посте от Dark_Spirit.

Вот тебе еще примеры
Это от меня (5-й пост) http://www.programmersforum.ru/showthread.php?t=203376
Вот еще от меня: http://www.programmersforum.ru/showthread.php?t=198926
Чутка попроще, чем в той ссылке, что я дал выше постом.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.05.2015, 11:56   #5
Nasle73
Пользователь
 
Регистрация: 09.05.2015
Сообщений: 11
По умолчанию

С заполнением записей в столбцах вроде как вопрос решил.
Код который изменил:
// записываем данные из DBGrid1
s:=DBGrid1.Fields[0].AsString+separat+DBGrid1.Fields[1].AsString+separat+DBGrid1.Fields[2].AsString+separat+DBGrid1.Fields[3].AsString
+separat+DBGrid1.Fields[4].AsString+separat+DBGrid1.Fields[5].AsString+separat+DBGrid1.Fields[6].AsString+#13;

Просто добавил столько же переменных сколько и столбцов.
В итоге остались проблемы которые описывал выше.
Выводится только третья строка. Причем таблица формируется только когда открыт какой либо документ.
Иначе выводит ошибку показанную на скриншоте.
Изображения
Тип файла: jpg 1.JPG (27.8 Кб, 99 просмотров)
Тип файла: jpg 2.JPG (31.7 Кб, 97 просмотров)
Nasle73 вне форума Ответить с цитированием
Старый 16.05.2015, 11:57   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Читай мой последний пост.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.05.2015, 12:03   #7
Nasle73
Пользователь
 
Регистрация: 09.05.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Читай мой последний пост.
Проблема в том, что шаблон типа .dot мне не подойдет. У меня имеется документ с расширением .doc. Который менять нельзя, нужно чтобы именно в нем, после текста который написан там, формировалась таблица.
Nasle73 вне форума Ответить с цитированием
Старый 16.05.2015, 12:43   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Который менять нельзя
А почему ты его в шаблон не сделаешь, кольскоро менять нельзя?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.05.2015, 12:59   #9
Nasle73
Пользователь
 
Регистрация: 09.05.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А почему ты его в шаблон не сделаешь, кольскоро менять нельзя?
Вот попробовал как вы говорили, сделал в шаблон.

Код:
Код:
procedure TForm17.Button5Click(Sender: TObject);
var
WordApp,WordDoc,WordTable,WordRow:OleVariant;
i:integer;
begin

try WordApp:=CreateOleObject('Word.Application');except exit; end;
 WordDoc:=WordApp.documents.add(ExtractFilePath(ParamStr(0))+'prikaz.dot');

 WordTable := WordDoc.Tables.Item(1);

with DataModule11.ADOTable6 do
 while not eof do begin

  WordRow:=WordTable.Rows.Add;
  for i:=0 to FieldCount-1 do
   WordTable.Cell(WordRow.Index, i).Range.Text :=Fields[i].AsString;
 end;
выходит ошибка
Изображения
Тип файла: jpg 1.JPG (30.7 Кб, 89 просмотров)
Nasle73 вне форума Ответить с цитированием
Старый 16.05.2015, 13:00   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А как у тебя шаблон выглядит?
Кстати, а ты внимательно читал, что я в темах по ссылке писал? Или решил что скопипастив код решишь все все все на свете?
I'm learning to live...

Последний раз редактировалось Stilet; 16.05.2015 в 13:03.
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
таблицы из Delphi в WORD groznii_32 Общие вопросы Delphi 0 04.10.2013 12:01
Delphi работа с Word (таблицы) ScorpioN_T Общие вопросы Delphi 6 31.03.2012 17:46
Вывод данных из Access в Word GROSS777 БД в Delphi 1 22.11.2011 13:32
Отображение таблицы БД в Word (Delphi) ара Помощь студентам 1 09.11.2011 12:17
Как вычислять значения вне таблицы WORD, с использованием данных из таблицы WORD prikolist Microsoft Office Word 6 21.11.2008 13:17