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

Экспорт БД в Excel

19.01.2016, 13:10. Показов 1593. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Подскажите пожалуйста, как можно сделать так, чтобы при экспорте таблицы в EXCEL данные менялись только на 1 листе, а не происходила замена всей книги! (на 2 листе хочу чтобы всегда оставался шаблон диаграммы)
Код:
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
procedure TForm1.Button1Click(Sender: TObject);
begin
 SaveDialog1.DefaultExt :='xlsx';
 if not SaveDialog1.Execute then Exit;
  BeginCol := 1;
  BeginRow := 3;
  ExcelApp := CreateOleObject('Excel.Application');
  try
  ExcelApp.Application.EnableEvents := False;
  Workbook := ExcelApp.WorkBooks.Add;
  RowCount := ADOQuery1.RecordCount;
  ColCount := ADOQuery1.FieldCount;
  ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);
 ADOQuery1.First;
 ADOQuery1.DisableControls;
 
 i :=0;
 
for k :=1 to DBGrid1.FieldCount do
if DBGrid1.Columns.Items[k-1].Visible then
 begin
  i :=i+1;
  ExcelApp.cells[1,i] :=DBGrid1.Columns.Items[k-1].Title.caption;
 end;
 
  WorkBook.WorkSheets[1].Rows[1].Font.Bold := True;
  WorkBook.WorkSheets[1].Rows[1].Font.Color := clBlack;
  WorkBook.WorkSheets[1].Rows[1].Font.Size := 12;
  WorkBook.WorkSheets[1].Rows[1].HorizontalAlignment := 3;
 
  While not ADOQuery1.EOF do
   Begin
       For j := 1 To  DBGrid1.Columns.Count do
       Begin
           ArrayData[ ADOQuery1.RecNo, j] :=
             ADOQuery1.FieldbyName( ADOQuery1.Fields[j - 1].FieldName).value;
       End;
        ADOQuery1.Next;
end;
 ADOQuery1.EnableControls;
  ExcelApp.cells[1,1].Select;
  Cell1 := WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];
  Cell2 := WorkBook.WorkSheets[1].Cells[BeginRow  + DbGrid1.DataSource.DataSet.RecordCount - 1,
           BeginCol + DbGrid1.DataSource.DataSet.FieldCount - 1];
 
  Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2];
  Range.Value := ArrayData;
    Range.HorizontalAlignment :=2;
  ExcelApp.Columns.AutoFit;
  Range.Borders.LineStyle :=1;
  Range.Borders.Weight :=2;
  ExcelApp.ActiveSheet.PageSetup.Orientation := 2;
  ADOQuery1.First;
  workbook.worksheets[1].SaveAs(SaveDialog1.FileName);
   finally
 
  Workbook.Close(SaveChanges :=False);
  ExcelApp.Quit;
  ExcelApp := Unassigned;
end;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.01.2016, 13:10
Ответы с готовыми решениями:

Экспорт в Excel
Project1.exe raised exception class EDataBaseError with message `Cannot access field `Project1.exe raised exception class EDataBaseError...

Экспорт в Excel
Использую Access+Delphi. Для экспорта использую вот этот код: procedure TBForm.SpeedButton7Click(Sender: TObject); const ...

Экспорт из Excel в БД
Здравствуйте. Вот такая задача: нужно из Excel скопировать в базу данных. В данном случаи я создал обычную бд парадокс, там 3...

17
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
19.01.2016, 13:42
вот тут
Delphi
1
ExcelApp := CreateOleObject('Excel.Application');
вы создаете объект
попробуйте не писать в него, а открыть существующий шаблон и писать на первый лист
0
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 11
20.01.2016, 09:56  [ТС]
Я новичок в этом вопросе. Можете показать как именно это можно сделать?
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
20.01.2016, 10:03
Kulakov056,
ExcelApp.Workbooks.Open(<имя файла>);
0
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 11
20.01.2016, 10:31  [ТС]
Выходит ошибка [Fatal Error] Unit1.pas(12): Internal error: SY576
1
при вставке кода
ExcelApp.Workbooks.Open('111.xlsx'); вместо
ExcelApp := CreateOleObject('Excel.Application');
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
20.01.2016, 10:43
да что ж такое
вас что в гугле всех забанили?

вот же тема в корне обсуждения
Инструкция: Использование Excel из Delphi
0
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 11
20.01.2016, 11:09  [ТС]
Delphi глючит, при перезапуске программы та ошибка пропадает. Но сейчас делфи ругается на то что нет такого файла, хотя он на самом деле есть и раньше уже туда данные выгружались.
Миниатюры
Экспорт БД в Excel  
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
20.01.2016, 11:37
если вы делали ExcelApp := CreateOleObject('Excel.Application');
неправильно у вас в памяти могут остаться процессы Excel
0
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 11
20.01.2016, 15:09  [ТС]
Да в процессах остаются Excel. Добавил строку ExcelApp.Visible:=True; которая как бы должна исправить ситуацию с процессами, но все осталось по-прежнему.
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
20.01.2016, 15:43
Цитата Сообщение от Kulakov056 Посмотреть сообщение
Добавил строку ExcelApp.Visible:=True; которая как бы должна исправить ситуацию с процессами
ничего она не должна исправить
это вы должны исправить - когда заканчиваете работать с экселем вам нужно отпустить его

смотрите по ссылке
0
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 11
20.01.2016, 17:15  [ТС]
Если имеете ввиду ссылку, которую давали выше то я все по не сделал. Других ссылок не вижу

Для завершения работы с экселем использую:
Delphi
1
2
3
4
ExcelApp.Visible:=False;
  ExcelApp:= Unassigned;
  Workbook.Close;
  ExcelApp.Quit;
Что еще нужно чтобы его отпустить!?
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
20.01.2016, 17:22
Kulakov056,
ничего, у вас он в процессах не должен оставаться
0
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 11
20.01.2016, 17:27  [ТС]
Мистика прям какая то (см. скриншот 222). И проблему так и не решил....(см. скриншот 333)
0
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 11
20.01.2016, 17:29  [ТС]
Скрины
Миниатюры
Экспорт БД в Excel   Экспорт БД в Excel  
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
21.01.2016, 08:32
нужно видеть что вы понаписали
0
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 11
21.01.2016, 12:30  [ТС]
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
procedure TForm1.Button1Click(Sender: TObject);
begin
 SaveDialog1.DefaultExt:='xlsx';
 if not SaveDialog1.Execute then Exit;
  BeginCol := 1;
  BeginRow := 3;
  ExcelApp := CreateOleObject('Excel.Application');
  ExcelApp.Workbooks.Open('111.xlsx');
 
  try
  ExcelApp.Application.EnableEvents := False;
  Workbook := ExcelApp.WorkBooks.Worksheets[1].Add;
  RowCount := ADOQuery1.RecordCount;
  ColCount := ADOQuery1.FieldCount;
  ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);
 ADOQuery1.First;
 ADOQuery1.DisableControls;
 
 i :=0;
 
for k :=1 to DBGrid1.FieldCount do
if DBGrid1.Columns.Items[k-1].Visible then
 begin
  i :=i+1;
  ExcelApp.cells[1,i] :=DBGrid1.Columns.Items[k-1].Title.caption;
 end;
 
  WorkBook.WorkSheets[1].Rows[1].Font.Bold := True;
  WorkBook.WorkSheets[1].Rows[1].Font.Color := clBlack;
  WorkBook.WorkSheets[1].Rows[1].Font.Size := 12;
  WorkBook.WorkSheets[1].Rows[1].HorizontalAlignment := 3;
 
  While not ADOQuery1.EOF do
   Begin
       For j := 1 To  DBGrid1.Columns.Count do
       Begin
           ArrayData[ ADOQuery1.RecNo, j] :=
             ADOQuery1.FieldbyName( ADOQuery1.Fields[j - 1].FieldName).value;
       End;
        ADOQuery1.Next;
end;
 ADOQuery1.EnableControls;
  ExcelApp.cells[1,1].Select;
  Cell1 := WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];
  Cell2 := WorkBook.WorkSheets[1].Cells[BeginRow  + DbGrid1.DataSource.DataSet.RecordCount - 1,
           BeginCol + DbGrid1.DataSource.DataSet.FieldCount - 1];
 
  Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2];
  Range.Value := ArrayData;
    Range.HorizontalAlignment :=2;
  ExcelApp.Columns.AutoFit;
  Range.Borders.LineStyle :=1;
  Range.Borders.Weight :=2;
  ExcelApp.ActiveSheet.PageSetup.Orientation := 2;
  ADOQuery1.First;
  workbook.SaveAs(SaveDialog1.FileName);
   finally
 
  Workbook.Close(SaveChanges :=False);
  ExcelApp.Quit;
  ExcelApp := Unassigned;
end;
end;
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
21.01.2016, 13:21
вот так нужно завершать
Delphi
1
2
3
4
5
6
7
8
9
...
  Rng := Unassigned;
  Sheet := Unassigned;
  Workbook.Close;
  Workbook := Unassigned;
  XL.Quit;
  XL := Unassigned;
  CoUnInitialize;
end;
нашел тут
[cut]

Что мешало вам поискать?
0
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 11
21.01.2016, 22:11  [ТС]
Многое смотрел в поиске, это не попалось на глаза. Но все равно не помогает. Проблема скорее кроется в том что он почему то не может найти EXCEL файл
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.01.2016, 22:11
Помогаю со студенческими работами здесь

Экспорт в Excel
создал базу в Access соединил ее с Delphi необходимо вывести ее в Excel... как это сделать?

Экспорт в excel
Всем доброго дня! Делаю экспорт записей из dbgrid в excel(шаблон). Кто подскажет как сделать автосумму при выводе записей в...

Экспорт в Excel
Помогите!!!:help: Пишу прогу на основе базы! Неоходим код экспорта в Excel... :help:

Экспорт в Excel
в бд есть кнопка экспорт в эксель, вот ее код: procedure TForm1.SpeedButton7Click(Sender: TObject); var ExcelApp, sheet,XLA, exRng :...

Экспорт в Excel
Привет всем. Помогите пожалуйста, делаю отчет в Excel таблицы ADOTable, как вывести в отчет еще значение Edit? Как прописать в коде? ...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru