Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
18 / 18 / 6
Регистрация: 26.03.2012
Сообщений: 130
Записей в блоге: 2

Экспорт из AdoQuery в Excel

12.02.2013, 17:48. Показов 4780. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу Димпломный проект. ТЗ - БД Учёт технического оборудования, создал бд, теперь мне нужно выгрузить из AdoQuery данные в Excel.

Кто может поделиться кодом. Поиск использовал, но ничего не нашёл...glumb...

Добавлено через 21 минуту
Попробовал этот метод
C++
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
    #include <ComObj.hpp>
    #include <Excel_XP.h>
    ...
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        Screen->Cursor = crHourGlass;
        DBGrid1->DataSource->DataSet->DisableControls();
        TBookmark bm = DBGrid1->DataSource->DataSet->GetBookmark();
        DBGrid1->DataSource->DataSet->First();
     
        // создаём объект Excel
        Variant XLApp = CreateOleObject("Excel.Application");
     
        Variant XLBook = XLApp.OlePropertyGet("Workbooks").OlePropertyGet("Add", xlWBATWorksheet);
        Variant XLSheet = XLBook.OlePropertyGet("Worksheets", 1);
        XLSheet.OlePropertySet("Name", "Grid Data");
     
        // Сперва отправляем данные в memo
        // работает быстрее, чем отправлять их напрямую в Excel
     
        // можешь создать Memo динамически, я просто бросил его на форму...
        mem->Clear();
     
        // добавляем информацию для имён колонок
        AnsiString sline = "";
        for(int col = 0; col < DBGrid1->FieldCount; ++col)
        {
            sline += DBGrid1->Fields[col]->DisplayLabel + (char)9;
        }
        mem->Lines->Add(sline);
     
        // получаем данные из memo
        for(int row = 0; row < DBGrid1->DataSource->DataSet->RecordCount; ++row)
        {
            sline = "";
            for(int col = 0; col < DBGrid1->FieldCount; ++col) {
                sline += DBGrid1->Fields[col]->AsString + (char)9;
            }
            mem->Lines->Add(sline);
            DBGrid1->DataSource->DataSet->Next();
        }
     
        // копируем данные в clipboard
        mem->SelectAll();
        mem->CopyToClipboard();
     
        XLSheet.OleProcedure("Paste");
        XLApp.OlePropertySet("Visible", true);
     
        // ... тут закрываешь Excel
     
        DBGrid1->DataSource->DataSet->GotoBookmark(bm);
        DBGrid1->DataSource->DataSet->FreeBookmark(bm);
        DBGrid1->DataSource->DataSet->EnableControls();
        Screen->Cursor = crDefault;
    }

Выводит ошибку: Class EoleSysError Недопустимая строка с указание класса
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.02.2013, 17:48
Ответы с готовыми решениями:

Экспорт из AdoQuery в Excel
Здравствуйте, помогите пожалуйста. Сразу перейду к сути: БД - Access; ADO; Delphi7. Необходимо экспортировать данные из ADOQuery на...

Экспорт нескольких Excel файлов в один Excel файл
Здравствуйте! Помогите пожалуйста с реализацией макроса (осилил только загрузку с одного файла), а необходимо загрузить несколько xls...

Хитроумный экспорт Excel->Excel через кнопку
В общем, встал вопрос автоматизации создания документа. Есть большая табличка с кучей полей в Excel и есть 2 разных документа, которые...

10
18 / 18 / 6
Регистрация: 26.03.2012
Сообщений: 130
Записей в блоге: 2
12.02.2013, 17:58  [ТС]
В чём может быть проблема? Includ подключил #include <ComObj.hpp>
Миниатюры
Экспорт из AdoQuery в Excel  
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.02.2013, 18:08
http://wladm.narod.ru/Borland/excel.html
2
18 / 18 / 6
Регистрация: 26.03.2012
Сообщений: 130
Записей в блоге: 2
12.02.2013, 18:30  [ТС]
Я Уже там, тему ниже моей проглядел...

Добавлено через 20 секунд
А так хотел спросить, как бороться с таким сообщением, от чего оно зависит?

Добавлено через 11 минут
Уже на этом шаге при компиляции выдаёт ошибку, подобную той, что я выше описал и выложил скриншот

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
bool fStart;
if(!fStart)
 {
  try
  {
vVarApp=CreateOleObject("Excel.Application");// Îòêðûòèå ïðèëîæåíèÿ Excel
fStart=true;
  }
  catch(...)
  {
   MessageBox(0, "Îøèáêà ïðè îòêðûòèè ñåðâåðà Excel",
                 "Îøèáêà", MB_OK);
  return;
}
}
Добавлено через 8 минут
vVarApp=CreateOleObject("Excel.Applicati on");// Открытие приложения Excel

Я думаю на эту строчку ругается, может наверно у меня не установлены офисные программы, ведь я использую портативные версии.....
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.02.2013, 18:33
А вот это вверху у тебя есть?
C++
1
2
#include      <ComObj.hpp>
#include      <utilcls.h>
0
18 / 18 / 6
Регистрация: 26.03.2012
Сообщений: 130
Записей в блоге: 2
12.02.2013, 18:36  [ТС]
Есть конечно

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <vcl.h>
#pragma hdrstop
#include      <ComObj.hpp>
#include      <utilcls.h>
#include "Unit1.h"
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CCALENDR"
#pragma link "cdiroutl"
#pragma resource "*.dfm"
TForm1 *Form1;
 
Variant  vVarApp,vVarBooks,vVarBook,vVarSheets,
                 vVarSheet,vVarCells,vVarCell;
int index, i, j;
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.02.2013, 18:37
Цитата Сообщение от lexis Посмотреть сообщение
ведь я использую портативные версии.....
Тогда используй сохранение в файл с расширением csv, сам так делал проблем нет
0
18 / 18 / 6
Регистрация: 26.03.2012
Сообщений: 130
Записей в блоге: 2
12.02.2013, 20:54  [ТС]
Мы ведь обращаемся к компоненту в самом билдере?

Создаем Объект Excel.Application.

vVarApp=CreateOleObject("Excel.Applicati on");


Тогда наверно тут не причём портативные версии....

Добавлено через 2 минуты
В Общем поставлю я тогда Excel к себе на пк, отпишусь...

Добавлено через 23 минуты
Цитата Сообщение от Sasha Посмотреть сообщение
Тогда используй сохранение в файл с расширением csv

Попробовал использовать, сохраняет иероглифами, да и поля в кучу собирает...

Добавлено через 2 минуты
а так если открыть этот файл, то читается нормально в DBGrid

Добавлено через 2 минуты
Но мне нужно экспорт сделать, чтобы был читаем в Экселе

Добавлено через 12 минут
Пишет ошибку Класс не зарегестрирован, не найден вот такой вот файл: Excel_2K_SRVR.cpp


Где его скачать, в библиотеках я его не нашёл....

Добавлено через 1 час 29 минут
ХА, установил офис 2003, всё заработало!!! Экспортирует как надо!

C++
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
#include      <ComObj.hpp>
#include      <utilcls.h>
 
Variant  vVarApp,vVarBooks,vVarBook,vVarSheets,
                 vVarSheet,vVarCells,vVarCell;
int index, i, j;
 
        Screen->Cursor = crHourGlass;
        DBGrid1->DataSource->DataSet->DisableControls();
        TBookmark bm = DBGrid1->DataSource->DataSet->GetBookmark();
        DBGrid1->DataSource->DataSet->First();
     
        // ñîçäà¸ì îáúåêò Excel
        Variant XLApp = CreateOleObject("Excel.Application");
     
        Variant XLBook = XLApp.OlePropertyGet("Workbooks").OlePropertyGet("Add", xlWBATWorksheet);
        Variant XLSheet = XLBook.OlePropertyGet("Worksheets", 1);
        XLSheet.OlePropertySet("Name", "Grid Data");
     
        // Ñïåðâà îòïðàâëÿåì äàííûå â memo
        // ðàáîòàåò áûñòðåå, ÷åì îòïðàâëÿòü èõ íàïðÿìóþ â Excel
     
        // ìîæåøü ñîçäàòü Memo äèíàìè÷åñêè, ÿ ïðîñòî áðîñèë åãî íà ôîðìó...
        mem->Clear();
     
        // äîáàâëÿåì èíôîðìàöèþ äëÿ èì¸í êîëîíîê
        AnsiString sline = "";
        for(int col = 0; col < DBGrid1->FieldCount; ++col)
        {
            sline += DBGrid1->Fields[col]->DisplayLabel + (char)9;
        }
        mem->Lines->Add(sline);
     
        // ïîëó÷àåì äàííûå èç memo
        for(int row = 0; row < DBGrid1->DataSource->DataSet->RecordCount; ++row)
        {
            sline = "";
            for(int col = 0; col < DBGrid1->FieldCount; ++col) {
                sline += DBGrid1->Fields[col]->AsString + (char)9;
            }
            mem->Lines->Add(sline);
            DBGrid1->DataSource->DataSet->Next();
        }
     
        // êîïèðóåì äàííûå â clipboard
        mem->SelectAll();
        mem->CopyToClipboard();
     
        XLSheet.OleProcedure("Paste");
        XLApp.OlePropertySet("Visible", true);
     
        // ... òóò çàêðûâàåøü Excel
     
        DBGrid1->DataSource->DataSet->GotoBookmark(bm);
        DBGrid1->DataSource->DataSet->FreeBookmark(bm);
        DBGrid1->DataSource->DataSet->EnableControls();
        Screen->Cursor = crDefault;

Я просто счастлив
1
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
28.08.2013, 13:55
У меня Office 2007 установлен.
На эту строку:
C++
1
Variant XLBook = XLApp.OlePropertyGet("Workbooks").OlePropertyGet("Add", xlWBATWorksheet);
компилятор ругается с ошибками:
[C++ Error] LanClntBD.cpp(984): E2451 Undefined symbol 'xlWBATWorksheet'
[C++ Error] LanClntBD.cpp(984): E2285 Could not find a match for 'Variant::OlePropertyGet(char *,undefined)'

Добавлено через 30 минут
Если переменную (переменная ли это?) xlWBATWorksheet объявить в:

C++
1
2
Variant  vVarApp,vVarBooks,vVarBook,vVarSheets,
                   vVarSheet,vVarCells,vVarCell;
компилятор срабатывает, но при отработке кода ошибка вылетает.

Добавлено через 23 часа 59 минут
Проблема решилась, но данные из таблицы на русском языке в excel передаются в виде абракадабры.
В чём проблема может быть?
0
 Аватар для sesit
0 / 0 / 0
Регистрация: 12.12.2012
Сообщений: 29
16.12.2013, 16:57
Цитата Сообщение от 4aynik Посмотреть сообщение
Проблема решилась, но данные из таблицы на русском языке в excel передаются в виде абракадабры.
В чём проблема может быть?
Привет, как ты решил проблему?
0
3 / 3 / 2
Регистрация: 29.06.2012
Сообщений: 118
23.04.2014, 12:32
Вот так...
C
1
const int xlWBATWorksheet = -4167;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.04.2014, 12:32
Помогаю со студенческими работами здесь

Экспорт данных из таблицы Excel в шаблон Excel
Добрый день! Проблемка заключается в следующем: В папке debug во вложении есть файл &quot;Дмитров_расшифровка - копия&quot;. С него...

Экспорт-импорт данных Excel-Access-Excel
Доброе время суток уважаемые форумчане. Приходит информация в экселевской таблице. Скидываю её в общую базу в Access. Для отчета...

Excel -> Access -> Excel, импорт - экспорт
Добрый день! Есть табель учета рабочего времени в таблице Excel, задача - переместить данные со всех листов книги в DB Access, позже...

Создание листа в Excel через ADOQuery
Как создать (добавить) новый лист в Excel через ADOQuery???

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru