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

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

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

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помоги пожалуйста, у меня база данных по учету комп.техники, и мне нужно создать функцию которfя будет экспортировать мою таблицу в Excel.
Миниатюры
Создание отчета из таблицы Delphi в  Excel  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2018, 19:18
Ответы с готовыми решениями:

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

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

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

14
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 23
15.11.2018, 19:21  [ТС]
моя бд
Миниатюры
Создание отчета из таблицы Delphi в  Excel  
0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
15.11.2018, 19:42
Инструкция: Использование Excel из Delphi
Delphi 7. Вывод отчета в Excel
0
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 23
15.11.2018, 20:52  [ТС]
Я не понимаю в чем проблема. Помогите пожалуйста, курсовая на носу.
Миниатюры
Создание отчета из таблицы Delphi в  Excel  
0
5987 / 4562 / 1096
Регистрация: 29.08.2013
Сообщений: 28,202
Записей в блоге: 3
15.11.2018, 20:55
asg у вас DBGrid - а у него нет RowCount
0
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 23
15.11.2018, 20:56  [ТС]
а что тогда мне туда написать? или просто стереть RowCount?
0
 Аватар для Zergius
101 / 97 / 23
Регистрация: 11.01.2012
Сообщений: 868
15.11.2018, 20:57
В примере TStringList
У Вас TDBGrid

Данные в вашем случае нужно брать из AdoTable
0
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 23
15.11.2018, 20:59  [ТС]
этот код написан под 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
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
15.11.2018, 23:04
Цитата Сообщение от maksmesi Посмотреть сообщение
Пожалуйста можете переделать этот код по мою программу??
Выкладывайте архив с Вашим проектом.
0
 Аватар для MajentoDL
10 / 12 / 2
Регистрация: 01.09.2015
Сообщений: 105
16.11.2018, 08:55
Делай проще. Данные находятся не в гриде. подключи 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  [ТС]
Вот код. Для первой таблицы все работает а для второй выдает ошибку

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
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
16.11.2018, 20:06
Значит, Вы где-то за пределы DBGrid вышли...
0
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 23
16.11.2018, 21:11  [ТС]
Вот эта таблица которая выдает ошибку. помогите переделать код под нее.
Миниатюры
Создание отчета из таблицы Delphi в  Excel  
0
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 23
16.11.2018, 21:15  [ТС]
Можете переделать код под эту таблицу, просто я уже не понимаю что сделать можно
0
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
17.11.2018, 07:00
maksmesi, у Вас в таблице 3 поля, а в Эксель пытаетесь запихнуть 9!!! Где еще 6 полей?!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.11.2018, 07:00
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru