Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/26: Рейтинг темы: голосов - 26, средняя оценка - 4.65
3 / 3 / 2
Регистрация: 29.06.2012
Сообщений: 118

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

23.04.2014, 15:54. Показов 5055. Ответов 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
9915 / 6452 / 2455
Регистрация: 21.01.2014
Сообщений: 27,386
Записей в блоге: 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): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru