65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 ODBC 创建 Excel 工作表

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.69/5 (23投票s)

2000年1月13日

viewsIcon

349008

仅使用 ODBC 写入 Excel 电子表格

问题

许多应用程序都提供导出功能。那么,将结果轻松保存为 Excel 表格不是很好吗?

ODBC 使这成为可能,但有一个小缺点:以通常的方式使用 ODBC,需要在 ODBC 管理器中注册一个数据源 (DSN)。

这不太实用,因为您需要在应该支持您的导出功能的每台机器上本地安装该 DSN。

解决方案

CDatabase::OpenEx() 的连接字符串中省略 DSN 标签,使我们能够直接使用其名称引用 ODBC 驱动程序,因此我们不必注册 DSN。当然,这表示 ODBC 驱动程序的名称必须完全已知。

如果您只想测试某个驱动程序是否存在(例如,在 CFileOpenDlg 中显示支持的扩展名),只需尝试 CDatabase::OpenEx() 即可。如果未安装,则会抛出异常。

要创建和写入该 Excel 表格,只需使用如下代码示例所示的 SQL 即可。

所需内容

为了使下面的代码运行,您需要

  • 拥有包含
  • 安装了名为“MICROSOFT EXCEL DRIVER (*.XLS)”的 ODBC 驱动程序

源代码

// this example creates the Excel file C:\DEMO.XLS, puts in a worksheet with two
// columns (one text the other numeric) an appends three no-sense records.   
//  
void MyDemo::Put2Excel()
{
  CDatabase database;
  CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // exactly the same name as in the ODBC-Manager
  CString sExcelFile = "c:\\demo.xls";                // Filename and path for the file to be created
  CString sSql;
    
  TRY
  {
    // Build the creation string for access without DSN
       
    sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",
                sDriver, sExcelFile, sExcelFile);

    // Create the database (i.e. Excel sheet)
    if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
    {
      // Create table structure
      sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)";
      database.ExecuteSQL(sSql);

      // Insert data
      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);
    }      

    // Close database
    database.Close();
  }
  CATCH_ALL(e)
  {
    TRACE1("Driver not installed: %s",sDriver);
  }
  END_CATCH_ALL;
}
© . All rights reserved.