Создание файла Excel используя ODBC

Многие приложения, для сохранения отчётов или содержимого базы данных, используют функции для экспорта. Предлагаю Вашему вниманию очень простой метод сохранения результатов в Excel формате. ODBC предоставляет такую возможность. Единственный недостаток, это то, что на каждом компьютере, где будет запускаться Ваше приложение, должен быть установлен соответствующий драйвер ODBC. Но думаю, что это не проблемма, так как при установке Microsoft Office 97 этот драйвет устанавливается в систему по умолчанию.

Примечание вебмастера: пример настолько прост, что мне понадобилось всего 3 минуты, на то чтобы вставить кусок приводимой программы в Visual C++, откомпилировать и запустить готовую программку. Excel файл благополучно был создан :) Пример использует обычные SQL-запросы, поэтому каких либо трудностей тут не должно возникнуть ...

Что необходимо

Для того, чтобы всё заработало надо :

  • Добавить в проект #include <AFXDB.H>
  • проверить - установлен ли на компьютере ODBC-драйвер под названием "MICROSOFT EXCEL DRIVER (*.XLS)"

Собственно исходничек:

// пример создаёт Excel файл C:\DEMO.XLS, создаёт в нём таблицу с двумя
// колонками (текстовой и числовой) и добавляет в таблицу три строки.
//
void MyDemo::Put2Excel()
{
CDatabase database;
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // название драйвера в ODBC-менеджере
CString sExcelFile = "c:\\demo.xls"; // имя и путь для создаваемого файла
CString sSql;

TRY
{
// Форматируем строку для доступа минуя DSN

sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",
sDriver, sExcelFile, sExcelFile);

// Создаём базу данных (всмысле таблицу Excel)
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
// Создаём структуру таблицы
sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)";
database.ExecuteSQL(sSql);

// вставляем данные
sSql = "INSERT INTO demo (Name,Age) VALUES ('Bruno Brutalinsky',45)";
database.ExecuteSQL(sSql);

sSql = "INSERT INTO demo (Name,Age) VALUES ('Fritz Pappenheimer',30)";
database.ExecuteSQL(sSql);

sSql = "INSERT INTO demo (Name,Age) VALUES ('Hella Wahnsinn',28)";
database.ExecuteSQL(sSql);
}

// Закрываем базу данных
database.Close();
}
CATCH_ALL(e)
{
TRACE1("Driver not installed: %s",sDriver);
}
END_CATCH_ALL;
}