3 / 3 / 2
Регистрация: 29.06.2012
Сообщений: 118

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

23.04.2014, 15:54. Показов 5095. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте дорогие форумчане.
Есть рабочая программа, где работает
Экспорт в Excel, но только через Мемо:
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
 Variant  vVarApp, vVarBooks, vVarBook, vVarSheets, vVarSheet, vVarCells, vVarCell;
    const int xlWBATWorksheet = -4167;
    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;}   */
А хотелось бы напрямую - из DBGrid1 в Excel. Вот код, там было через StringGrid, передал под DBGrid, но правильно закончить не могу. Ексель открывается, но ничего не происходит. Поможете???
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
Variant  vVarApp, vVarBooks, vVarBook, vVarSheets, vVarSheet, vVarCells, vVarCell;
    const int xlWBATWorksheet = -4167;
    vVarApp=CreateOleObject("Excel.Application");
    vVarApp.OlePropertySet("Visible",true);
    vVarBooks=vVarApp.OlePropertyGet("Workbooks");
    vVarApp.OlePropertySet("SheetsInNewWorkbook",1);
    vVarBooks.OleProcedure("Add");
    vVarBook=vVarBooks.OlePropertyGet("Item",1);
    vVarSheets=vVarBook.OlePropertyGet("Worksheets");
    vVarSheet=vVarSheets.OlePropertyGet("Item",1);
    vVarSheet.OleProcedure("Activate");
 
    vVarCell=vVarSheet.OlePropertyGet("Range","A1:Q1");
    vVarCell.OleProcedure("Merge");
    vVarCell.OlePropertySet("HorizontalAlignment",-4108);
    vVarCell.OlePropertyGet("Font").OlePropertySet("Size",16);
    vVarCell.OlePropertyGet("Font").OlePropertySet("Name","Arial");
    vVarCell.OlePropertySet("Value","BTS info");
 
    for (int r = 0; r < DBGrid1->DataSource->DataSet->RecNo-1;  r++)
        for (int c = 0; c < DBGrid1->FieldCount;  c++)
        {
            Variant cell = vVarSheet.OlePropertyGet("Cells", r + 3, c + 1);
            cell.OleProcedure("Paste"); //Вот тут проблема  cell.OlePropertySet("Value", WideString(StringGrid1->Cells[c][r]));
 
        }                       }
Добавлено через 3 часа 8 минут
А вот так -
C++
1
2
3
4
5
6
7
8
9
int index= 1;
               DBGrid1->DataSource->DataSet->First();
    for (int r = 0; r < DBGrid1->DataSource->DataSet->RecordCount-1;  r++)
        for (int c = 0; c < DBGrid1->FieldCount;  c++)
        {
        vVarCell = vVarSheet.OlePropertyGet("Cells", r + 3, c + 1);
        vVarCell.OlePropertySet("Value",DBGrid1->Columns);
       //   inc(index);
         DBGrid1->DataSource->DataSet->Next();
Выводит "истина" во все столбцы
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2014, 15:54
Ответы с готовыми решениями:

Экспорт в EXCEL
Доброго времени суток всем. Знаю, в интернете полно информации ою экспорте из DBGrid в EXCEL, но я решил сам разобраться и сделать его...

Экспорт в Excel
Всем привет, помогите пожалуйста как делать экспорт в excel?) На форме есть ADOTable, DBGrid Нужно при нажатии на кнопку...

Экспорт картинки в Excel
Добрый день! На форме имеется image, как отправить содержимое в Excel в указанное место, например: &quot;A1:C10&quot;? Добавлено...

5
27 / 27 / 10
Регистрация: 10.04.2013
Сообщений: 91
24.04.2014, 14:10
RustamCTE, вот недавно делал сохранение из stringgrid. Попробуйте, переделав под dbgrid, должно получится.
C++
1
2
3
4
5
6
7
8
9
10
11
12
    WideString str;
    TStringList *sl = new TStringList;
    for (int i=0; i<StringGrid1->RowCount; ++i) {
        for (int j=0; j<StringGrid1->ColCount; ++j)
            str+=StringGrid1->Cells[j][i]+ "\t";
            sl->Add(Trim(str));
            str = "\n\r" ;
            str="";
    }
    if (SaveDialog1->Execute())
        sl->SaveToFile(SaveDialog1->FileName + ".xls");
    delete sl;
1
3 / 3 / 2
Регистрация: 29.06.2012
Сообщений: 118
24.04.2014, 15:17  [ТС]
Привет.
Я и пытался переделать из StringGrid:
C++
1
2
3
4
5
6
7
 for (int r = 0; r < StringGrid1->RowCount; r++)
        for (int c = 0; c < StringGrid1->ColCount; c++)
        {
            Variant cell = vVarSheet.OlePropertyGet("Cells", r + 3, c + 1);
            cell.OlePropertySet("Value", WideString(StringGrid1->Cells[c][r]));
 
        }
Не получилось.
А вот с твоим кодом - посмотрел, не пойму с чего подступиться. А именно, что поменять? Я использую Ole. Твой код - думаю по другому выполняется...
0
2 / 2 / 3
Регистрация: 01.03.2015
Сообщений: 131
13.11.2015, 01:43
...
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
13.11.2015, 04:27
Экспорт из DBGrid в Excel
0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,399
Записей в блоге: 3
16.11.2015, 17:49
RustamCTE, тут посмотри
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.11.2015, 17:49
Помогаю со студенческими работами здесь

DBGridEh экспорт в Excel
Привет, как пользоваться функцией экспорта в С++ ? #include &quot;DBGridEhImpExp.h&quot; ..... SaveDBGridEhToExportFile() #include...

Экспорт из DBGrid в Excel
Здравствуйте!!! кто-нить может подсказать как вывести инфу из DBGrid в excel ???

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

Экспорт массива в Excel
Доброго времени суток. Проблемка такая: У меня есть пару гигабайт данных в массиве, которые нужно перегнать в Excel. Все работает пока я...

Экспорт грида в Excel
Требуется экспортировать содержимое грида в Excel. Использую ehlib(TDBGridEhExportAsXLS). Но естьь проблема все мои данные в юникоде и...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
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