vc 通过ODBC 方式操作EXCEL

 天一个朋友让帮忙写段程序,关于VC操作Excel的,还挺着急。我没做过这个,网上查吧,讲解的倒是不少,不过比较乱,整了两个多小时才弄出来。基于ODBC的,程序有bug,不过为了应付差事,先交了。

这个程序就是把Excel当作一个数据库,使用sql语句进行操作。这个程序通用性不强,不能够处理任意的Excel文件,大概是因为把Excel文件当成数据库,对于文件格式要求的比较严格。

程序参考自:http://www.programfan.com/club/showtxt.asp?id=252948

环境是:VC6.0 + Excel2003

过程如下:

用支持MFC的控制台程序来做个简单的实验。

首先,要在stdafx.h头文件中引入ODBC的头文件:
#include <afxdb.h>
#include <odbcinst.h>

然后,写函数。生成一个demo.xls文件,并插入数据,然后从demo.xls中读取数据,将call price前面几行求和,结果写到call price后面单元格内。

void CalculateExcel()
{
    CDatabase database;
    CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动
    CString sExcelFile = "demo.xls";
   
    TRY
    {
        // 创建进行存取的字符串
        CString strSql;
        strSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);
       
        // 创建数据库 (即Excel表格文件)
        if(!database.OpenEx(strSql,CDatabase::noOdbcDialog))
        {
            printf("Excel表格打开失败\n");
            return;
        }

        // 创建表,并插入值
        strSql = "create table demo(A char(20), B double)";
        database.ExecuteSQL(strSql);
        strSql = "insert into demo(A, B) values('asd', 23)";
        database.ExecuteSQL(strSql);
        strSql = "insert into demo(A, B) values('sfs', 564.2)";
        database.ExecuteSQL(strSql);
        strSql = "insert into demo(A, B) values('asfe', 42)";
        database.ExecuteSQL(strSql);
        strSql = "insert into demo(A) values('call price')"; // call price 计算结果写到它后面
        database.ExecuteSQL(strSql);

       
        // 读取所有的值,并将前三项数据求和,将结果写入到call price后面的单元格中
        CRecordset rs(&database);
       
        // 设置读取的查询语句
        strSql = "SELECT * FROM demo";
       
        // 执行查询语句
        rs.Open(CRecordset::forwardOnly, strSql);

        printf("begin……\n");
       
        // 获取查询结果,并计算
        CString strValue1, strValue2;
        float sum = 0.0f;
        while (!rs.IsEOF())
        {
            //读取Excel内部数值
            rs.GetFieldValue("A", strValue1);
            rs.GetFieldValue("B", strValue2);
           
            if (strValue1 != "call price")
            {
                sum += atof(strValue2);
                printf("%s\t\t%s\n", strValue1, strValue2);
            }
           
            // 移到下一行
            rs.MoveNext();
        }
       
        rs.Close();
       
        // 插入数值
        strValue2.Format("%.2f", sum);
        strSql = "UPDATE demo SET B='" + strValue2 + "' WHERE A='call price'";
        database.ExecuteSQL(strSql);
       
        printf("\nthe result:\n%s\t%s\n", strValue1, strValue2);
        printf("\nupdate file end!\n\n");
       
        // 关闭数据库
        database.Close();
    }
    CATCH_ALL(e)
    {
        printf("Excel驱动没有安装: %s\n", sDriver);
    }
    END_CATCH_ALL;
}

程序执行结果如下图:

控制台上:

创建了Excel表格,并将结果写入:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值