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

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

23.04.2014, 15:54. Показов 5146. Ответов 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
9926 / 6462 / 2457
Регистрация: 21.01.2014
Сообщений: 27,416
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru