Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.73/26: Рейтинг темы: голосов - 26, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
1

Выгрузка из DbGrid в Excel

22.10.2014, 16:03. Просмотров 4800. Ответов 21
Метки нет (Все метки)


Решила сделать выгрузку из DBGrid в Excel.
Ни разу не делала(
набросала код, просто записи в Ексел, пишет ошибку

Delphi
1
2
3
4
5
6
7
procedure TForm7.N2Click(Sender: TObject);
Var Ap : Variant;
begin
Ap := CreateOleObject('Excel.Application');
Ap.Workbooks.Open('Анализ результатов');
Ap.Range['A1'] := 'бла бла';
end;
Файл Анализ результатов ежит в каталоге там же, где весь проект
0
Миниатюры
Выгрузка из DbGrid в Excel  
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2014, 16:03
Ответы с готовыми решениями:

Выгрузка DBGrid Excel
Добрый день, подскажите пожалуйста один момент. Есть FDBQuery, в который я через field editor...

Компонент QExport3DBF или выгрузка из dbgrid в dbf
Добрый день, на просторах интернета увидел, что есть возможность выгрузки данных из dbgrid в dbf...

Из Excel в DBGrid. Подключиться к рабочей книге MS Excel, как к базе данных.
Доброго времени суток! У меня возникли проблемы при выводе таблицы с Excel на DBGrid, а именно:...

Заполнение шаблона excel из DBGrid при этом сохранив имеющиеся данные в excel
Здравствуйте. у меня есть список который при нажатии на кнопку в делфи заполнятся в excel. Как мне...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
21
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30871 / 20192 / 7875
Регистрация: 22.10.2011
Сообщений: 35,053
Записей в блоге: 6
22.10.2014, 16:12 2
Ну, так и напиши:
Delphi
1
Ap.Workbooks.Open(ExtractFilePath(ParamStr(0)) + 'Анализ результатов.xlsx');
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
22.10.2014, 16:15  [ТС] 3
UI, написала
ошибка
0
Миниатюры
Выгрузка из DbGrid в Excel  
723 / 475 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
22.10.2014, 16:25 4
Ну здесь у меня не выгрузка, а заполнения шаблона.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
procedure OpenExcelSaveOrPrintFile(FileName: string; Deystvie: integer); // открытие файла, сохранение, печать
var
  ExcelApplication: TExcelApplication;
  WorkBk: _WorkBook;
  WorkSheet: _WorkSheet;
  K, R, X, Y: Integer;
  IIndex: OleVariant;
  RangeMatrix: Variant;
  i, n: integer;
  FExcelFileName: WideString; // имя открываемого файла;
  FList: TStringList;
  FIndexList: integer;
  Mas: array of array of string;
  ns: integer;
begin
  FList:=TStringList.Create;
  FExcelFileName:=ExtractFilePath(application.ExeName)+'Default\spravka.xls';
  if FileExists(FExcelFileName) then
  begin
    try
      ExcelApplication:=TExcelApplication.Create(nil);
      IIndex := 1;
      ExcelApplication.Connect;
      // Открываем файл Excel
      ExcelApplication.WorkBooks.Open(FExcelFileName, 2, false, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, false, EmptyParam, EmptyParam, 0);
      WorkBk := ExcelApplication.WorkBooks.Item[IIndex];
 
      n:=WorkBk.Sheets.Count; // кол-во листов
 
      // заполнение FList именами листов
      for i:=1 to n do
      begin
        WorkSheet := WorkBk.WorkSheets.Get_Item(i) as _WorkSheet;
        FList.Add(WorkSheet.name);
      end;
      FIndexList:=1;
 
      WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
      (WorkBk.Sheets[1] as _Worksheet).Select(True, 0);
 
      // Чтобы знать размер листа (WorkSheet), т.е. количество строк и количество
      // столбцов, мы активируем его последнюю непустую ячейку
      WorkSheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
      // Получаем значение последней строки
      X := ExcelApplication.ActiveCell.Row;
      // Получаем значение последней колонки
      Y := ExcelApplication.ActiveCell.Column;
      // Сопоставляем матрицу WorkSheet с нашей Delphi матрицей
      RangeMatrix := ExcelApplication.Range['A1', ExcelApplication.Cells.Item[X, Y]].Value2;
 
//Номер справки
      ExcelApplication.Cells.Item[4, 13]:=form11.SpravkaNo;
      //Организация
      ExcelApplication.Cells.Item[9, 4]:=form11.ComboBox1.Text;
      //Заказчик
      ExcelApplication.Cells.Item[11, 3]:=form11.Edit1.Text;
      //Объект
      ExcelApplication.Cells.Item[13, 3]:=form11.Edit2.Text;
      //Машина
      ExcelApplication.Cells.Item[15, 3]:=form11.Edit3.Text;
      //Марка
      ExcelApplication.Cells.Item[15, 11]:=form11.Edit4.Text;
      //Госномер
      ExcelApplication.Cells.Item[17, 12]:=form11.Edit5.Text;
      //Машинисты
      ExcelApplication.Cells.Item[18, 4]:=form11.Edit6.Text;
 
      //Период работы - с
      ExcelApplication.Cells.Item[15, 21]:=form11.Edit7.Text;
      //Период работы - по
      ExcelApplication.Cells.Item[15, 24]:=form11.Edit8.Text;
 
      //Дата составления - число
      ExcelApplication.Cells.Item[8, 20]:=formatdatetime('dd', now);
      //Дата составления - месяц
      ExcelApplication.Cells.Item[8, 22]:=formatdatetime('mm', now);
      //Дата составления - год
      ExcelApplication.Cells.Item[8, 25]:=formatdatetime('yy', now);
 
      for ns:=1 to form11.StringGrid1.RowCount-1 do
      begin
      //Наименование работ
        ExcelApplication.Cells.Item[25+ns-1, 1]:=form11.StringGrid1.Cells[0, ns];
      //Кол-во
        ExcelApplication.Cells.Item[25+ns-1, 14]:=form11.StringGrid1.Cells[1, ns];
      //Стоимость часа работы
        ExcelApplication.Cells.Item[25+ns-1, 18]:=floattostrf(strtofloat(form11.StringGrid1.Cells[2, ns]), ffCurrency, 7, 2);
      //Стоимость работы
        ExcelApplication.Cells.Item[25+ns-1, 23]:=floattostrf(strtofloat(form11.StringGrid1.Cells[3, ns]), ffCurrency, 7, 2);
      end;
 
      //Итого - Машино-часов
      ExcelApplication.Cells.Item[32, 14]:=form11.StaticText2.Caption;
      //Итого - работы
      ExcelApplication.Cells.Item[32, 23]:=floattostrf(strtofloat(form11.StaticText3.Caption), ffCurrency, 7, 2);
      //Сумма НДС
      ExcelApplication.Cells.Item[35, 23]:=floattostrf(strtofloat(form11.StaticText4.Caption), ffCurrency, 7, 2);
      //Всего с учетом НДС
      ExcelApplication.Cells.Item[36, 23]:=floattostrf(strtofloat(form11.StaticText5.Caption), ffCurrency, 7, 2);
      //Исполнитель - расшифровка подписи
      ExcelApplication.Cells.Item[41, 17]:=form11.Edit11.Text;
      //Исполнитель - должность
      ExcelApplication.Cells.Item[41, 5]:=form11.Edit12.Text;
      //Отработано машино часов
      ExcelApplication.Cells.Item[37, 7]:=SumNumToFull(strtofloat(form11.StaticText2.Caption));
 
      case Deystvie of
        1: Worksheet.SaveAs(FileName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
        2: Worksheet.PrintOut(EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, lcid);
      end;
 
      Mas:=nil;
      setlength(Mas, X, Y);
 
      // Определяем цикл для заполнения
      for R:=1 to Y do
      for K:=1 to X do
      Mas[K-1, R-1]:=string(RangeMatrix[K, R]);
    finally
      // закрываем без вопроса на сохранение изменений
      ExcelApplication.DisplayAlerts[0]:=false;
      ExcelApplication.WorkBooks.Close(0);
      // Выходим из Excel и отсоединяемся от сервера
      ExcelApplication.Quit;
      ExcelApplication.Disconnect;
      // Unassign the Delphi Variant Matrix
      RangeMatrix := Unassigned;
      ExcelApplication.Free;
    end;
  end
  else
  showmessage('Нет файла шаблона - '+FExcelFileName);
  FList.Free;
end;
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm11.Button1Click(Sender: TObject);
begin
  if form11.SaveDialog1.Execute then
  begin
    OpenExcelSaveOrPrintFile(form11.SaveDialog1.FileName, 1);
    if form11.CheckBox1.Checked then
    begin
      if FileExists(form11.SaveDialog1.FileName) then
      ShellExecute(Handle, nil, PChar(form11.SaveDialog1.FileName), nil, nil, SW_RESTORE)
      else
      showmessage('Ненайден файл - '+form11.SaveDialog1.FileName);
    end;
  end;
end;
0
723 / 475 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
22.10.2014, 16:25 5
Ну здесь у меня не выгрузка, а заполнения шаблона.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
procedure OpenExcelSaveOrPrintFile(FileName: string; Deystvie: integer); // открытие файла, сохранение, печать
var
  ExcelApplication: TExcelApplication;
  WorkBk: _WorkBook;
  WorkSheet: _WorkSheet;
  K, R, X, Y: Integer;
  IIndex: OleVariant;
  RangeMatrix: Variant;
  i, n: integer;
  FExcelFileName: WideString; // имя открываемого файла;
  FList: TStringList;
  FIndexList: integer;
  Mas: array of array of string;
  ns: integer;
begin
  FList:=TStringList.Create;
  FExcelFileName:=ExtractFilePath(application.ExeName)+'Default\spravka.xls';
  if FileExists(FExcelFileName) then
  begin
    try
      ExcelApplication:=TExcelApplication.Create(nil);
      IIndex := 1;
      ExcelApplication.Connect;
      // Открываем файл Excel
      ExcelApplication.WorkBooks.Open(FExcelFileName, 2, false, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, false, EmptyParam, EmptyParam, 0);
      WorkBk := ExcelApplication.WorkBooks.Item[IIndex];
 
      n:=WorkBk.Sheets.Count; // кол-во листов
 
      // заполнение FList именами листов
      for i:=1 to n do
      begin
        WorkSheet := WorkBk.WorkSheets.Get_Item(i) as _WorkSheet;
        FList.Add(WorkSheet.name);
      end;
      FIndexList:=1;
 
      WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
      (WorkBk.Sheets[1] as _Worksheet).Select(True, 0);
 
      // Чтобы знать размер листа (WorkSheet), т.е. количество строк и количество
      // столбцов, мы активируем его последнюю непустую ячейку
      WorkSheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
      // Получаем значение последней строки
      X := ExcelApplication.ActiveCell.Row;
      // Получаем значение последней колонки
      Y := ExcelApplication.ActiveCell.Column;
      // Сопоставляем матрицу WorkSheet с нашей Delphi матрицей
      RangeMatrix := ExcelApplication.Range['A1', ExcelApplication.Cells.Item[X, Y]].Value2;
 
//Номер справки
      ExcelApplication.Cells.Item[4, 13]:=form11.SpravkaNo;
      //Организация
      ExcelApplication.Cells.Item[9, 4]:=form11.ComboBox1.Text;
      //Заказчик
      ExcelApplication.Cells.Item[11, 3]:=form11.Edit1.Text;
      //Объект
      ExcelApplication.Cells.Item[13, 3]:=form11.Edit2.Text;
      //Машина
      ExcelApplication.Cells.Item[15, 3]:=form11.Edit3.Text;
      //Марка
      ExcelApplication.Cells.Item[15, 11]:=form11.Edit4.Text;
      //Госномер
      ExcelApplication.Cells.Item[17, 12]:=form11.Edit5.Text;
      //Машинисты
      ExcelApplication.Cells.Item[18, 4]:=form11.Edit6.Text;
 
      //Период работы - с
      ExcelApplication.Cells.Item[15, 21]:=form11.Edit7.Text;
      //Период работы - по
      ExcelApplication.Cells.Item[15, 24]:=form11.Edit8.Text;
 
      //Дата составления - число
      ExcelApplication.Cells.Item[8, 20]:=formatdatetime('dd', now);
      //Дата составления - месяц
      ExcelApplication.Cells.Item[8, 22]:=formatdatetime('mm', now);
      //Дата составления - год
      ExcelApplication.Cells.Item[8, 25]:=formatdatetime('yy', now);
 
      for ns:=1 to form11.StringGrid1.RowCount-1 do
      begin
      //Наименование работ
        ExcelApplication.Cells.Item[25+ns-1, 1]:=form11.StringGrid1.Cells[0, ns];
      //Кол-во
        ExcelApplication.Cells.Item[25+ns-1, 14]:=form11.StringGrid1.Cells[1, ns];
      //Стоимость часа работы
        ExcelApplication.Cells.Item[25+ns-1, 18]:=floattostrf(strtofloat(form11.StringGrid1.Cells[2, ns]), ffCurrency, 7, 2);
      //Стоимость работы
        ExcelApplication.Cells.Item[25+ns-1, 23]:=floattostrf(strtofloat(form11.StringGrid1.Cells[3, ns]), ffCurrency, 7, 2);
      end;
 
      //Итого - Машино-часов
      ExcelApplication.Cells.Item[32, 14]:=form11.StaticText2.Caption;
      //Итого - работы
      ExcelApplication.Cells.Item[32, 23]:=floattostrf(strtofloat(form11.StaticText3.Caption), ffCurrency, 7, 2);
      //Сумма НДС
      ExcelApplication.Cells.Item[35, 23]:=floattostrf(strtofloat(form11.StaticText4.Caption), ffCurrency, 7, 2);
      //Всего с учетом НДС
      ExcelApplication.Cells.Item[36, 23]:=floattostrf(strtofloat(form11.StaticText5.Caption), ffCurrency, 7, 2);
      //Исполнитель - расшифровка подписи
      ExcelApplication.Cells.Item[41, 17]:=form11.Edit11.Text;
      //Исполнитель - должность
      ExcelApplication.Cells.Item[41, 5]:=form11.Edit12.Text;
      //Отработано машино часов
      ExcelApplication.Cells.Item[37, 7]:=SumNumToFull(strtofloat(form11.StaticText2.Caption));
 
      case Deystvie of
        1: Worksheet.SaveAs(FileName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
        2: Worksheet.PrintOut(EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, lcid);
      end;
 
      Mas:=nil;
      setlength(Mas, X, Y);
 
      // Определяем цикл для заполнения
      for R:=1 to Y do
      for K:=1 to X do
      Mas[K-1, R-1]:=string(RangeMatrix[K, R]);
    finally
      // закрываем без вопроса на сохранение изменений
      ExcelApplication.DisplayAlerts[0]:=false;
      ExcelApplication.WorkBooks.Close(0);
      // Выходим из Excel и отсоединяемся от сервера
      ExcelApplication.Quit;
      ExcelApplication.Disconnect;
      // Unassign the Delphi Variant Matrix
      RangeMatrix := Unassigned;
      ExcelApplication.Free;
    end;
  end
  else
  showmessage('Нет файла шаблона - '+FExcelFileName);
  FList.Free;
end;
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm11.Button1Click(Sender: TObject);
begin
  if form11.SaveDialog1.Execute then
  begin
    OpenExcelSaveOrPrintFile(form11.SaveDialog1.FileName, 1);
    if form11.CheckBox1.Checked then
    begin
      if FileExists(form11.SaveDialog1.FileName) then
      ShellExecute(Handle, nil, PChar(form11.SaveDialog1.FileName), nil, nil, SW_RESTORE)
      else
      showmessage('Ненайден файл - '+form11.SaveDialog1.FileName);
    end;
  end;
end;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30871 / 20192 / 7875
Регистрация: 22.10.2011
Сообщений: 35,053
Записей в блоге: 6
22.10.2014, 16:30 6
POVT, не xslx, а xlsx
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
22.10.2014, 16:38  [ТС] 7
UI, Спасибо. А как сделать теперь так, чтобы содержимое DBGrida выводилось в Excel?

Добавлено через 5 минут
UI, Игорь[Igor], Сделала вот так. Но в Эксел почему-то вообще ничего не добавляется((
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
rocedure TForm7.N2Click(Sender: TObject);
Var Ap,WB,WS : Variant;
i,j:integer;
 
begin
Ap := CreateOleObject('Excel.Application');
Ap.Workbooks.Open(ExtractFilePath(ParamStr(0)) + 'Àíàëèç ðåçóëüòàòîâ.xlsx');
Ap.Range['F8'] := edit10.Text;
 with TMyDBGrid(DBGrid1).DataLink do
 begin
   for i:=0 to (RecordCount-1) do
   begin
     for j:=0 to (FieldCount-1) do
     begin
       Ap.Cells[i+1, j+1].Value:=Fields[j].AsString;
     end;
   end;
 end;
Ap.Visible := True;
end;
0
723 / 475 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
22.10.2014, 16:48 8
Зачем грид, работайте с самой таблицей или запросом
Delphi
1
DataModule2.ADOQueryVvodDannih.FieldByName('Наименование').AsString
По коду выше по колонкам проходит, а по строкам нет, и потому записей нет
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
22.10.2014, 16:49  [ТС] 9
Игорь[Igor], а как тогда код будет выглядеть код вывода в ексел?
0
723 / 475 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
22.10.2014, 16:54 10
Одним циклом пройтись по записям
Delphi
1
for i:=0 to (RecordCount-1) do
А в нутри цикла присваивать каждой ячейке содержимое нужного поля
Delphi
1
2
Ap.Cells[i+1, 1].Value:=DataModule2.ADOTable1.FieldByName('Поле1').AsString;
Ap.Cells[i+1, 2].Value:=DataModule2.ADOTable1.FieldByName('Поле2').AsString;
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
22.10.2014, 16:57  [ТС] 11
Игорь[Igor],
Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
Ap.Cells[i+1, 1].Value:=DataModule2.ADOTable1.FieldByName('Поле1').AsString;
а если у меня нет ADO table
у меня Грид привязан к датасурсу. а дата сурс к квери
0
723 / 475 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
22.10.2014, 17:15 12
Delphi
1
Ap.Cells[i+1, 1].Value:=DataModule2.ADOQuery.FieldByName('Поле1').AsString;
Добавлено через 7 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Var Ap,WB,WS : Variant;
i,j:integer;
begin
Ap := CreateOleObject('Excel.Application');
Ap.Workbooks.Open(ExtractFilePath(ParamStr(0)) + 'Àíàëèç ðåçóëüòàòîâ.xlsx');
Ap.Range['F8'] := edit10.Text;
 with DBGrid1.DataSource.DataSet do
 begin
   for i:=0 to (RecordCount-1) do
   begin
     for j:=0 to (FieldCount-1) do
     begin
       Ap.Cells[i+1, j+1].Value:=Fields[j].AsString;
     end;
   end;
 end;
Ap.Visible := True;
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
22.10.2014, 17:15  [ТС] 13
Игорь[Igor], сделала. но почему-то в эксель записались только одни 5
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm7.N2Click(Sender: TObject);
Var Ap,WB,WS : Variant;
i,j:integer;
 
begin
Ap := CreateOleObject('Excel.Application');
Ap.Workbooks.Open(ExtractFilePath(ParamStr(0)) + 'Àíàëèç ðåçóëüòàòîâ.xlsx');
Ap.Range['F8'] := edit10.Text;
 with TMyDBGrid(DBGrid1).DataLink do
 begin
for i:=0 to (RecordCount-1) do
   begin
    Ap.Cells[i+1, 1].Value:=DataModule3.ADOQuery15.FieldByName('FIO').AsString;
    Ap.Cells[i+1, 1].Value:=DataModule3.ADOQuery15.FieldByName('Samochuv').AsString;
     end;
   end;
 
Ap.Visible := True;
end;
0
723 / 475 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
22.10.2014, 17:20 14
Delphi
1
2
Ap.Cells[i+1, 1].Value:=DataModule3.ADOQuery15.FieldByName('FIO').AsString;
Ap.Cells[i+1, 2].Value:=DataModule3.ADOQuery15.FieldByName('Samochuv').AsString;
Добавлено через 1 минуту
Выше еще твою переписал
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
22.10.2014, 17:23  [ТС] 15
Игорь[Igor], сделала как ты написал
Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
Код Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Var Ap,WB,WS : Variant;
i,j:integer;
begin
Ap := CreateOleObject('Excel.Application');
Ap.Workbooks.Open(ExtractFilePath(ParamStr(0)) + 'Анализ результатов.xlsx');
Ap.Range['F8'] := edit10.Text;
*with DBGrid1.DataSource.DataSet do
*begin
* *for i:=0 to (RecordCount-1) do
* *begin
* * *for j:=0 to (FieldCount-1) do
* * *begin
* * * *Ap.Cells[i+1, j+1].Value:=Fields[j].AsString;
* * *end;
* *end;
*end;
Ap.Visible := True;
но почему-то одно и тоже записывает в эксел
0
Изображения
 
723 / 475 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
22.10.2014, 17:26 16
Лучший ответ Сообщение было отмечено POVT как решение

Решение

Delphi
1
2
3
4
5
6
7
8
9
10
with TMyDBGrid(DBGrid1).DataLink do
 begin
DataModule3.ADOQuery15.First;
for i:=0 to (RecordCount-1) do
   begin
    Ap.Cells[i+1, 1].Value:=DataModule3.ADOQuery15.FieldByName('FIO').AsString;
    Ap.Cells[i+1, 2].Value:=DataModule3.ADOQuery15.FieldByName('Samochuv').AsString;
   DataModule3.ADOQuery15.Next;
     end;
   end;
1
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
22.10.2014, 17:34  [ТС] 17
Игорь[Igor], а как сделать чтобы он начал записывать в ячейку А6
0
723 / 475 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
22.10.2014, 17:37 18
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var
  Ap, WB, WS: Variant;
  i, j: integer;
begin
  Ap := CreateOleObject('Excel.Application');
  Ap.Workbooks.Open(ExtractFilePath(ParamStr(0)) + 'Àíàëèç ðåçóëüòàòîâ.xlsx');
  Ap.Range['F8'] := edit10.Text;
  with DBGrid1.DataSource.DataSet do
  begin
    for i:=0 to (RecordCount-1) do
    begin
      RecNo:=i+1;
      for j:=0 to (FieldCount-1) do
      begin
        Ap.Cells[i+1, j+1].Value:=Fields[j].AsString;
      end;
    end;
  end;
  Ap.Visible := True;
Добавлено через 1 минуту
Сам говорил и сам же пропустил

Добавлено через 55 секунд
Цитата Сообщение от POVT Посмотреть сообщение
а как сделать чтобы он начал записывать в ячейку А6
Delphi
1
Ap.Cells[i+1, 6]
0
1 / 1 / 0
Регистрация: 10.07.2014
Сообщений: 240
22.10.2014, 17:40  [ТС] 19
Игорь[Igor],
Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
Ap.Cells[i+1, 6]
нееее)) так он в 6 столбец записывает. А мне нужно в 6 строку и так далее вниз

и еще у меня почему-то не выполняется эта строчка( не записывает
Delphi
1
Ap.Range['F8'] := edit10.Text;
0
723 / 475 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
22.10.2014, 17:44 20
Delphi
1
Ap.Cells[i+7, 1]
Цитата Сообщение от POVT Посмотреть сообщение
и еще у меня почему-то не выполняется эта строчка( не записывает
У меня записывается
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2014, 17:44

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Выгрузка в Excel
Всем доброго времени суток. Люди добрые, кто знает как выгрузить в Excel из запроса весь набор...

Выгрузка данных с Firebird в Excel
Возникла проблема с выгрузкой данных в ексель из базы данных на Firebird. Есть таблица Стобец...

Выгрузка данных из Delphi в Excel
Делаю выгрузку данных через процедуру SendtoExcel. При заполнении массива пишу следующий код:...

Выгрузка данных из Excel в Ibexpert
Ребята, помогите! надо выгрузить данные из экселя в Ibexpert. можно просто в массив. не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.