Из DBGrid в Excel в Borland C++ Builder

Автор: Администратор
Дата публикации: 24 октября 2012 года
Раздел: Статьи для программиста

Решение проблемы передачи данных из DBGrid в Excel

DBGrid в Excel

Итак, речь в данной статье пойдет о переносе данных из DBGrid в Excel, используя среду разработки Borland C++ Builder. Мне как-то понадобилось выполнить данное мероприятие и, знаете, мне пришлось повозиться для того чтобы это сделать. В сети никто не написал подробного и работающего на все 100 процентов руководства. Все темы заканчиваются одной и той же фразой: «Посмотри тут или там». Круговорот... Это было печально. Пришлось все это собрать в одну статью. Теперь Вы можете просто вставить этот код на нажатие кнопки и данные из Вашего DBGrid окажутся в Excel.

Код программы и комментарии

Из истории... Мне надо было три столбца вывести из DBGrid в Excel. Именно это и происходит в программе.

Сначала объявляем переменные. Мне были необходимы три строковые переменные – значения, записанные в ячейках и семь переменных типа Variant. Чуть не забыл – еще пару счетчиков.

String exp1, exp2, exp3;
Variant appVarApp, appVarBooks, appVarBook, appVarSheets, appVarSheet, appVarCells,  appVarCell;
int index, i, j;

Далее обрабатываем исключения и записываем следующий код:

try
{
// создаем приложение и назначаем переменную для него
appVarApp = CreateOleObject("Excel.Application");
// не задаем вопрос на сохранение данных в файл
appVarApp.OlePropertySet("DisplayAlerts", false);
// назначаем переменной "Книги" объект
appVarBooks = vVarApp.OlePropertyGet("Workbooks");
// В новой книге будет 1 лист
appVarApp.OlePropertySet("SheetsInNewWorkbook", 1);
// Добавляем книгу (1)
appVarBooks.OleProcedure("Add");
// Выбираем книгу 1
appVarBook = vVarBooks.OlePropertyGet("Item", 1);
// Назначаем переменной "Листы" объект: листы первой книги
appVarSheets = vVarBook.OlePropertyGet("Worksheets");
// Выбираем лист 1 книи 1
appVarSheet = vVarSheets.OlePropertyGet("Item", 1);
// Изменяем имя листа
appVarSheet.OlePropertySet("Name", "Лист 1");
}
catch (...)
{
MessageBox(0, "Ошибка при работе с Excel", "Ошибка", MB_OK);
}

Исключение мы обработали. Теперь предлагаю посмотреть основной код программы с некоторыми комментариями по ходу его исполнения:

// Выбираем лист 1 текущей книги
appVarSheet = vVarSheets.OlePropertyGet("Item", 1);
// Делаем его активным
appVarSheet.OleProcedure("Activate");
// Устанавливаем значение счетчика в 1
index = 1;
// Это заголовок таблицы
String k="Вывод из DBGrid в Excel";
// Назначаем диапазон ячеек
appVarCell = vVarSheet.OlePropertyGet("Range", "A1:C1");
// Объединяем ячейки в диапазоне
appVarCell.OleProcedure("Merge");
// Выравнимаем текст по центру
appVarSheet.OlePropertyGet("Rows", 1).OlePropertySet("HorizontalAlignment", 3);
// Ставим зеленый цвет заливки
appVarSheet.OlePropertyGet("Cells", 1,1).OlePropertyGet("Interior").OlePropertySet("ColorIndex",4);
// Ставим жирный шрифт
appVarSheet.OlePropertyGet("Cells", 1,1).OlePropertyGet("Font").OlePropertySet("Bold",1);
// Прорисовываем границы ячейки (1, 1)
appVarApp.OlePropertyGet("Cells", 1,1).OlePropertyGet("Borders",10).OlePropertySet("Weight",2);
appVarApp.OlePropertyGet("Cells", 1,1).OlePropertyGet("Borders",7).OlePropertySet("Weight",2);
appVarApp.OlePropertyGet("Cells", 1,1).OlePropertyGet("Borders",8).OlePropertySet("Weight",2);
appVarApp.OlePropertyGet("Cells", 1,1).OlePropertyGet("Borders",9).OlePropertySet("Weight",2);
// Устанавливаем размер шрифта 18
appVarSheet.OlePropertyGet("Rows",1).OlePropertyGet("Font").OlePropertySet("Size",18);
// Выводим заголовок
appVarSheet.OlePropertyGet("Cells").OlePropertyGet("Item",1,1).OlePropertySet("Value", k.c_str());
// Далее идет вывод из DBGrid и форматирование ячеек. Как я уже говорил мы выводим 0, 1 и 6 ячейки
DBGrid1->DataSource->DataSet->First();
for(i=1;iDataSource->DataSet->RecordCount;i++)
{
exp1=DBGrid1->Fields[0]->AsString;
exp2=DBGrid1->Fields[1]->AsDateTime;
exp3=DBGrid1->Fields[6]->AsString;
appVarApp.OlePropertyGet("Cells",index+1,1).OlePropertyGet("Borders",10).OlePropertySet("Weight",2);
appVarApp.OlePropertyGet("Cells",index+1,1).OlePropertyGet("Borders",7).OlePropertySet("Weight",2);
appVarApp.OlePropertyGet("Cells",index+1,1).OlePropertyGet("Borders",8).OlePropertySet("Weight",2);
appVarApp.OlePropertyGet("Cells",index+1,1).OlePropertyGet("Borders",9).OlePropertySet("Weight",2);
appVarApp.OlePropertyGet("Cells",index+1,2).OlePropertyGet("Borders",10).OlePropertySet("Weight",2);
appVarApp.OlePropertyGet("Cells",index+1,2).OlePropertyGet("Borders",7).OlePropertySet("Weight",2);
appVarApp.OlePropertyGet("Cells",index+1,2).OlePropertyGet("Borders",8).OlePropertySet("Weight",2);
appVarApp.OlePropertyGet("Cells",index+1,2).OlePropertyGet("Borders",9).OlePropertySet("Weight",2);
appVarApp.OlePropertyGet("Cells",index+1,3).OlePropertyGet("Borders",10).OlePropertySet("Weight",2);
appVarApp.OlePropertyGet("Cells",index+1,3).OlePropertyGet("Borders",7).OlePropertySet("Weight",2);
appVarApp.OlePropertyGet("Cells",index+1,3).OlePropertyGet("Borders",8).OlePropertySet("Weight",2);
appVarApp.OlePropertyGet("Cells",index+1,3).OlePropertyGet("Borders",9).OlePropertySet("Weight",2);
appVarSheet.OlePropertyGet("Columns").OlePropertyGet("Item", 2).OlePropertySet("ColumnWidth", 30);
appVarSheet.OlePropertyGet("Columns").OlePropertyGet("Item", 3).OlePropertySet("ColumnWidth", 30);
appVarSheet.OlePropertyGet("Cells").OlePropertyGet("Item",index+1,1).OlePropertySet( "Value", exp1.c_str());
appVarSheet.OlePropertyGet("Cells").OlePropertyGet("Item",index+1,2).OlePropertySet( "Value", exp2.c_str());
appVarSheet.OlePropertyGet("Cells").OlePropertyGet("Item",index+1,3).OlePropertySet( "Value", exp2.c_str());
index++;
DBGrid1->DataSource->DataSet->Next();
}
// Выбираем файл для сохранения
Char *Name="d:privet.xls";
// Сохраняем данные в файл
appVarApp.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs", Name);
// Закрываем все
appVarApp.OleProcedure("Quit");

Ну вот и все. Вам остается только скопировать этот код в программу и подставить пару своих данных. Ксати, хотел заметить, что экспорт из DBGrid в Excel в Delphi происходит аналогично.

Fatal error: Call to a member function return_links() on a non-object in /var/www/zoleg9992/data/www/e2epro.com/page/footer.php on line 42