Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/40: Рейтинг темы: голосов - 40, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 23
1
Delphi 6-7

Создание отчета из таблицы Delphi в Excel

15.11.2018, 19:18. Показов 7588. Ответов 14

Author24 — интернет-сервис помощи студентам
Здравствуйте. Помоги пожалуйста, у меня база данных по учету комп.техники, и мне нужно создать функцию которfя будет экспортировать мою таблицу в Excel.
Миниатюры
Создание отчета из таблицы Delphi в  Excel  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2018, 19:18
Ответы с готовыми решениями:

Вывод отчета из Delphi в Excel через ADOQuery
Ребятки, помогите пожалуйста, может я тупой просто, но нужно вывести отчет из Delphi в Excel из...

Создание отчета в Delphi связанным с БД Access
Подскажите, пожалуйста, с помощью каких компонентов можно создать отчет, предварительно выбрав...

Создание отчета в Delphi через FastReport
Ребят,срочно! 16 защита диплома, не могу через fast report сделать отчет. В общем, есть 2 таблицы,...

Создание отчета и его выгрузка в Excel, Word
Здравствуйте! Есть база данных в access и она соединена с делфи, мне нужно в делфи сделать отчеты,...

14
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 23
15.11.2018, 19:21  [ТС] 2
моя бд
Миниатюры
Создание отчета из таблицы Delphi в  Excel  
0
1437 / 1014 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
15.11.2018, 19:42 3
Инструкция: Использование Excel из Delphi
Delphi 7. Вывод отчета в Excel
0
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 23
15.11.2018, 20:52  [ТС] 4
Я не понимаю в чем проблема. Помогите пожалуйста, курсовая на носу.
Миниатюры
Создание отчета из таблицы Delphi в  Excel  
0
5489 / 4404 / 1076
Регистрация: 29.08.2013
Сообщений: 27,597
Записей в блоге: 3
15.11.2018, 20:55 5
asg у вас DBGrid - а у него нет RowCount
0
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 23
15.11.2018, 20:56  [ТС] 6
а что тогда мне туда написать? или просто стереть RowCount?
0
101 / 97 / 23
Регистрация: 11.01.2012
Сообщений: 868
15.11.2018, 20:57 7
В примере TStringList
У Вас TDBGrid

Данные в вашем случае нужно брать из AdoTable
0
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 23
15.11.2018, 20:59  [ТС] 8
этот код написан под StringGrid, мне надо переделать его под DBGrid

Добавлено через 1 минуту
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
uses ComObj;
 
{Передача данных из таблицы типа TStringGrid на лист рабочей книги MS Excel.
Функция возвращает ссылку на интерфейс диапазона MS Excel, в который записалась таблица.
aSg - экземпляр типа TStringGrid, из которого берутся данные.
aExSh - ссылка на интерфейс рабочего листа MS Excel, на который следует поместить данные.
aRow, aCol - координаты ячейки на листе aExSh, начиная с которой следует разместить таблицу.}
function SgToExcel(aSg : TStringGrid; aExSh : OleVariant; const aRow, aCol : Integer) : OleVariant;
var
  vArr : Variant;
  exCell : OleVariant;
  i, j : Integer;
begin
  //Создаём вариантный массив с размером, соответствующим размеру таблицы.
  vArr := VarArrayCreate([1, aSg.RowCount, 1, aSg.ColCount], varOleStr);
  //Записываем в вариантный массив данные таблицы.
  for i := 1 to aSg.RowCount do
    for j := 1 to aSg.ColCount do
      vArr[i, j] := aSg.Cells[j - 1, i - 1];
  //Ссылка на ячейку, в которой расположится левый верхний угол таблицы.
  exCell := aExSh.Cells[aRow, aCol];
  //Определяем диапазон, в который мы запишем данные таблицы.
  Result := aExSh.Range[exCell, exCell.Offset[aSg.RowCount - 1, aSg.ColCount - 1]];
  //Записываем данные вариантного массива в диапазон.
  Result.Value := vArr;
end;
 
//Пример использования функции SgToExcel().
procedure TForm1.Button1Click(Sender: TObject);
const
  //Толщина линий.
  xlThin = 2; //Тонкая линия.
  xlMedium = -4138; //Средняя толщина линии.
  //Вид линии.
  xlContinuous = 1; //Непрерывная линия.
var
  exApp, exBook, exSh, exRng : OleVariant;
  Sl : TStringList;
begin
  //Попытка запустить экземпляр MS Excel и получить ссылку на интерфейс его корневого объекта.
  try
    exApp := CreateOleObject('Excel.Application');
  except
    MessageBox(Handle, 'Не удалось запустить MS Excel. Действие отменено.',
      'Ошибка', MB_OK + MB_ICONERROR + MB_APPLMODAL);
    Exit;
  end;
  exApp.Visible := True;         //Делаем видимым окно MS Excel.
  exBook := exApp.WorkBooks.Add; //Создаём рабочую книгу и получаем ссылку на её интерфейс.
 
  //Записываем данные из StringGrid1 на первый лист MS Excel, начиная с ячейки "D3" (="R3C4").
 
  //Ссылка на интерфейс первого листа рабочей книги.
  exSh := exBook.Worksheets[1];
  //Записываем данные из StringGrid1 на лист MS Excel и получаем ссылку
  //на интерфейс диапазона, в который записались эти данные.
  exRng := SgToExcel(StringGrid1, exSh, 3, 4);
  //Оформляем таблицу - устанавливаем обрамление для ячеек таблицы.
  exRng.Borders.LineStyle := xlContinuous;
  exRng.Borders.Weight := xlMedium;
  //Выравниваем ширину столбцов по содержимому.
  exRng.Columns.AutoFit;
end;
Добавлено через 30 секунд
Пожалуйста можете переделать этот код по мою программу??
0
1437 / 1014 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
15.11.2018, 23:04 9
Цитата Сообщение от maksmesi Посмотреть сообщение
Пожалуйста можете переделать этот код по мою программу??
Выкладывайте архив с Вашим проектом.
0
10 / 12 / 2
Регистрация: 01.09.2015
Сообщений: 105
16.11.2018, 08:55 10
Делай проще. Данные находятся не в гриде. подключи Excel_TLB. Далее Fexcell :=CreateOleObject('Excel.Application');
// или загружаем его из директории с программой
Fexcell.WorkBooks.Open(GetCurrentDir() +path);
И циклом из датасета просто запихивай данные в ексель. excel.Sheets[1].Range['B7'].Value:=MyData;
0
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 23
16.11.2018, 18:20  [ТС] 11
Вот код. Для первой таблицы все работает а для второй выдает ошибку

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
procedure TForm1.N24Click(Sender: TObject);
var
XLapp, Sheet, Colum:Variant;
index,p:Integer;
begin
 XLApp:= CreateOleObject('Excel.Application');
 XLApp.Visible:=true;
 XLApp.Workbooks.Add(-4167);
 XLApp.Workbooks[1].WorkSheets[1].Name:='Отчёт';
 Colum:=XLApp.Workbooks[1].WorkSheets['Отчёт'].Columns;
 
 Colum.Columns[1].ColumnWidth:=35;
 Colum.Columns[2].ColumnWidth:=20;
 Colum.Columns[3].ColumnWidth:=25;
 Colum.Columns[4].ColumnWidth:=27;
 Colum.Columns[5].ColumnWidth:=15;
 Colum.Columns[6].ColumnWidth:=30;
 Colum.Columns[7].ColumnWidth:=30;
 Colum.Columns[8].ColumnWidth:=40;
 Colum.Columns[9].ColumnWidth:=18;
 
 Colum:=XLApp.Workbooks[1].WorkSheets['Отчёт'].Rows;
 Colum.Rows[2].Font.Bold:=true;
 Colum.Rows[1].Font.Bold:=true;
 Colum.Rows[1].Font.Color:=clBlue;
 Colum.Rows[1].Font.Size:=12;
 Colum.Rows[2].Font.Size:=12;
 Colum.Rows[3].Font.Size:=12;
 Colum.Rows[4].Font.Size:=12;
 Colum.Rows[5].Font.Size:=12;
 Colum.Rows[6].Font.Size:=12;
 Colum.Rows[7].Font.Size:=12;
 Colum.Rows[8].Font.Size:=12;
 Colum.Rows[9].Font.Size:=12;
 Colum.Rows.Font.Name:=' Times New Roman';
 
 Sheet:=XLApp.Workbooks[1].WorkSheets['Отчёт'];
 Sheet.Cells[1,2]:='Отчет по компьютерной техники :'+DateToStr(Date);
 Sheet.Cells[2,1]:='Наименование оборудования';
 Sheet.Cells[2,2]:='Заводской номер';
 Sheet.Cells[2,3]:='Инвентарный номер';
 Sheet.Cells[2,4]:='Операционная система';
 Sheet.Cells[2,5]:='Лицензия';
 Sheet.Cells[2,6]:='Ответственное лицо';
 Sheet.Cells[2,7]:='Отдел';
 Sheet.Cells[2,8]:='Должность';
 Sheet.Cells[2,9]:='Примечания';
 
 index :=3;
 
fDM.ADOTRM.First;
for p:=0 to fDM.ADOTRM.RecordCount-1 do
  begin
   Sheet.Cells[index,1]:= fDM. ADOTRM.Fields.Fields[1].AsString;
   Sheet.Cells[index,2]:= fDM. ADOTRM.Fields.Fields[2].AsString;
   Sheet.Cells[index,3]:= fDM. ADOTRM.Fields.Fields[3].AsString;
   Sheet.Cells[index,4]:= fDM. ADOTRM.Fields.Fields[4].AsString;
   Sheet.Cells[index,5]:= fDM. ADOTRM.Fields.Fields[5].AsString;
   Sheet.Cells[index,6]:= fDM. ADOTRM.Fields.Fields[6].AsString;
   Sheet.Cells[index,7]:= fDM. ADOTRM.Fields.Fields[7].AsString;
   Sheet.Cells[index,8]:= fDM. ADOTRM.Fields.Fields[8].AsString;
   Sheet.Cells[index,9]:= fDM. ADOTRM.Fields.Fields[9].AsString;
   Inc(index);
   fDM. ADOTRM.Next;
 
end;
Миниатюры
Создание отчета из таблицы Delphi в  Excel  
0
1437 / 1014 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
16.11.2018, 20:06 12
Значит, Вы где-то за пределы DBGrid вышли...
0
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 23
16.11.2018, 21:11  [ТС] 13
Вот эта таблица которая выдает ошибку. помогите переделать код под нее.
Миниатюры
Создание отчета из таблицы Delphi в  Excel  
0
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 23
16.11.2018, 21:15  [ТС] 14
Можете переделать код под эту таблицу, просто я уже не понимаю что сделать можно
0
Модератор
9611 / 6218 / 2423
Регистрация: 21.01.2014
Сообщений: 26,521
Записей в блоге: 3
17.11.2018, 07:00 15
maksmesi, у Вас в таблице 3 поля, а в Эксель пытаетесь запихнуть 9!!! Где еще 6 полей?!
0
17.11.2018, 07:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2018, 07:00
Помогаю со студенческими работами здесь

Таблицы Delphi и Excel
Нужно импортировать данные из таблицы Excel в таблицу Delphi. ПОМОГИТЕ!!!! КАК это сделать?????

Вывод таблицы из Delphi в Excel
Подскажите как Можно сделать вывод таблицы из Delphi "DBGrid1" в Excel? Добавлено через 31...

Связь запароленной таблицы Excel с Delphi
Всем привет. Опишу ситуацию: есть таблица excel и программка на delphi которая берет данные из...

Создание таблицы в Delphi
Как добавить таблицу?Через DataBase нельзя. Нужно написать обработчик события «Создание Формы»...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru