15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту




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

Автор: Alexander Mikula

Описание

Многие приложения, для сохранения отчётов или содержимого базы данных, используют функции для экспорта. Предлагаю Вашему вниманию очень простой метод сохранения результатов в 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;
}