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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2009, 22:39   #1
liienna
Пользователь
 
Аватар для liienna
 
Регистрация: 24.02.2009
Сообщений: 25
По умолчанию не переносятся данные из dbgrid в ms word

Всем доброго времени суток!
Есть база в аксес. подключена к delphi c помощью ado.
На форме есть dbgrid. из него данные нужно экспортировать в word.

Кусочек кода:
Код:
WordApplication1.Selection.Tables.Add(WordApplication1.Selection.Range, 1, 3, EmptyParam, EmptyParam);
       i:=1;
  WordApplication1.Selection.Tables.Item(i).Cell(1,1).Range.Text:= DBGrid19.Columns[0].Title.Caption;
  WordApplication1.Selection.Tables.Item(i).Cell(1,2).Range.Text:=DBGrid19.Columns[1].Title.Caption;
  WordApplication1.Selection.Tables.Item(i).Cell(1,3).Range.Text:=DBGrid19.Columns[2].Title.Caption;

  DM.ADOtable17.First;

for r:=1 to DM.ADOtable17.RecordCount do
  begin
  WordApplication1.Selection.Tables.Item(i).Cell(j,1).Range.Text:=DBGrid19.Fields[0].AsString;
  WordApplication1.Selection.Tables.Item(i).Cell(j,2).Range.Text:=DBGrid19.Fields[1].AsString;
  WordApplication1.Selection.Tables.Item(i).Cell(j,3).Range.Text:=DBGrid19.Fields[2].AsString;


WordApplication1.Selection.Tables.Item(i).Rows.Add(EmptyParam);

  DM.ADOtable17.Next;
В результате данные из таблицы не отображаются, или отображаются как попало.
Подскажите пожалуйста, в чем тут ошибка?

Последний раз редактировалось Stilet; 23.04.2011 в 18:21.
liienna вне форума Ответить с цитированием
Старый 09.05.2009, 23:13   #2
Абдуллаев Рустам
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 37
По умолчанию

Добрый вечер! Да интересно, вы экспортируете данные в word, я тоже хотел и столкнулся с этой проблемой и с самого начала переключился на сбрасывание данных в Exel, в принципе получилось, вот с форматированием надо до конца только разобраться.
Если вам не трудно не могли бы весь свой код написать?
Я покажу вам как делал с excel:
Код:
procedure TMainform.Button12Click(Sender: TObject);
var
xlapp,sheet,column:variant;
index,i,k,f,index2:integer;
s1,s2,s3,aud:string;
begin
with
adoquery22 do
begin
close;
parameters.ParamValues['cabnam']:=combobox7.Text;
open;
end;
adoquery22.Active:=true;
s1:=memo1.Lines.Strings[0];
s2:=memo1.Lines.strings[1];
s3:=memo1.Lines.strings[2];
adotable1.TableName:=label18.Caption;
XLApp:=createoleobject('Excel.Application');
Xlapp.visible:=true;
xlapp.workbooks.add(-4167);
xlapp.workbooks[1].worksheets[1].name:='Паспорт';

Column:=xlapp.workbooks[1].worksheets['Паспорт'].columns;
Column.columns[1].columnwidth:=7;
Column.columns[2].columnwidth:=60;    //nazv
column.columns[3].columnwidth:=12;   //kol
column.columns[4].columnwidth:=20;//inv
aud:=combobox7.text;
sheet:=xlapp.workbooks[1].worksheets['Паспорт'];
sheet.cells[1,1]:=s1;
sheet.cells[2,1]:=s2;
sheet.cells[3,1]:=s3;
sheet.cells[8,1]:='№';
sheet.cells[8,2]:='Название';
sheet.cells[8,3]:='Количество';
sheet.cells[8,4]:='Инвентарный №';
sheet.cells[5,2]:='Паспорт ауд.'+ aud;
//sheet.cells[5,2].HorizontalAlignment:=xlCenter;
sheet.cells[5,2].font.size:=14;

Column:=xlapp.workbooks[1].worksheets['Паспорт'].rows;
column.rows[8].font.bold:=true;

k:=1;
index:=9;
adotable1.Open;

adotable1.First;
for i:=0 to adotable1.RecordCount-1 do
begin
sheet.cells[index,1]:=k;
sheet.cells[index,2]:=adotable1.Fields.Fields[0].AsString;
sheet.cells[index,3]:=adotable1.Fields.Fields[2].AsInteger;
sheet.cells[index,4]:=adotable1.Fields.Fields[1].AsString;
inc(index);
inc(k);
adotable1.Next;
end;
f:=adotable1.RecordCount+10;
sheet.cells[f,2]:='Зав. кафедры ЭКТ:';
sheet.cells[f,2].font.bold:=true;
sheet.cells[f+2,2]:='Ответственные лица:';
sheet.cells[f+2,2].font.bold:=true;


adoquery23.Open;
adoquery23.First;
for i:=0 to adoquery23.RecordCount-1 do
begin
sheet.cells[f,3]:=adoquery23.Fields.Fields[0].AsString;
inc(f);
adoquery23.Next;
end;

index2:=f+1;
adoquery22.First;
for i:=0 to adoquery22.RecordCount-1 do
begin
sheet.cells[index2,3]:=adoquery22.Fields.Fields[0].AsString;
inc(index2);
adoquery22.Next;
end;
Adotable1.Close;
Adoquery22.Close;
Adoquery23.Close;


end;
mol4ok
Абдуллаев Рустам вне форума Ответить с цитированием
Старый 10.05.2009, 14:06   #3
liienna
Пользователь
 
Аватар для liienna
 
Регистрация: 24.02.2009
Сообщений: 25
По умолчанию

Разобралась!!!!!!!!!!!!!!!!!!!!!! Всем спасибо, кто ответил :-)))
liienna вне форума Ответить с цитированием
Старый 10.05.2009, 15:13   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

а если вы разобрались, то выложите пожалуйста код правильный, которым он должен быть и правильно переносить? А то я тоже хочу использовать этот способ переноса данных.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 10.05.2009, 15:47   #5
Абдуллаев Рустам
Пользователь
 
Регистрация: 01.05.2009
Сообщений: 37
По умолчанию

Да, выложите. Я тоже с этим сейчас работаю.
mol4ok
Абдуллаев Рустам вне форума Ответить с цитированием
Старый 10.05.2009, 18:51   #6
liienna
Пользователь
 
Аватар для liienna
 
Регистрация: 24.02.2009
Сообщений: 25
По умолчанию

Код:
Код:
procedure TForm5.sButton110Click(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:=3; // задаем количество столбцов
// записываем переменную в текст
for i:=1 to 1 do
begin
//записываем шапку из DBGrid17
WordApplication1.Selection.InsertAfter(DBGrid17.Columns[0].Title.Caption + separat+ DBGrid17.Columns[1].Title.Caption+ separat+DBGrid17.Columns[2].Title.Caption +#13);
 DataModule5.ADOQuery1.First;
  
 for r:=1 to  DataModule5.ADOQuery1.RecordCount do
 begin
// записываем данные из DBGrid17
s:=DBGrid17.Fields[0].AsString+separat+DBGrid17.Fields[1].AsString+separat+DBGrid17.Fields[2].AsString+#13;
 DataModule5.ADOQuery1.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;

Последний раз редактировалось Stilet; 23.04.2011 в 18:22.
liienna вне форума Ответить с цитированием
Старый 23.04.2011, 17:28   #7
Lady Meri
Пользователь
 
Регистрация: 30.11.2009
Сообщений: 10
По умолчанию

begin
WordApplication1.Connect; почему выводит на ошибку
Lady Meri вне форума Ответить с цитированием
Старый 23.04.2011, 18:22   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Какую ошибку?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.04.2011, 17:50   #9
Lady Meri
Пользователь
 
Регистрация: 30.11.2009
Сообщений: 10
По умолчанию

говорит данная команда не доступна ,так как не открыт ни один документ
Lady Meri вне форума Ответить с цитированием
Старый 29.04.2011, 10:23   #10
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

как один из вариантов экспорта из DBgrid:

Код:
procedure TForm1.Button1Click(Sender: TObject);
 var  wd:variant;
    rang:variant;
   table:variant;
    num_rows, num_columns:integer;
    i,j:integer;
begin
 if not(dbgrideh2.DataSource.DataSet.IsEmpty)
  then
   begin
    num_rows:=dbgrideh2.DataSource.DataSet.RecordCount;
    num_columns:=dbgrideh2.DataSource.DataSet.FieldCount;
    wd:=CreateOleObject('Word.application');
    wd.visible:=false;
    wd.documents.add;
    rang:=Wd.ActiveDocument.Range(Wd.ActiveDocument.Range.End-1,
                                Wd.ActiveDocument.Range.End-1);
    Wd.ActiveDocument.Tables.Add(Range:=Rang, NumRows:=num_rows, NumColumns:=num_columns);
    i:=1;
    table:=wd.activedocument.tables.item(1);
    while not (dbgrideh2.DataSource.DataSet.eof) do
     begin
      for j:=0 to num_columns-1 do
       begin
        table.cell(i, j+1).range.text:=dbgrideh2.DataSource.DataSet.Fields[j].asstring;
       end;
       dbgrideh2.DataSource.DataSet.next;
       inc(i);
     end;
   end;

  wd.ActiveDocument.SaveAs(extractfilepath(application.ExeName)+'test1.doc');
  wd.Application.Documents.Close;
  wd.Quit;
  wd:=UnAssigned;
end;
модуль comObj.
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как средствами VBA экспортировать данные из Excel в Word? Pavel_Ine Microsoft Office Excel 3 20.04.2009 14:14
Как занести данные в DBGrid bbk_serg БД в Delphi 4 25.02.2009 14:44
как в шаблоне Word напечатать данные из Exel Ирина Штефан Microsoft Office Excel 4 21.01.2009 01:23
Копировать данные из Excell в Word Dimon_isu Microsoft Office Excel 3 15.05.2008 12:12
добавить к опред столбцу DbGrid данные furstenberg Компоненты Delphi 4 27.02.2008 20:15