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

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

12.02.2013, 17:48. Показов 4749. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru