vc操作Excel。

pc操作系统情况:
    Windows XP,office 2003,vc6
经过半下午的搜索发现了vc操作Excel的几种方法
1、ODBC。
    暂时还没有试。
2、OLE,即com的方式。
    这种方法可能和Excel的版本有关系。
    在网上下载了一个基于office2000的代码,在自己的电脑上编译后,可以运行。
    自己建立一个工程,
    1)按ctrl-w,add class,from a type library,选择目录C:/Program Files/Microsoft Office/OFFICE11/XL5EN32.OLB,在Confirm Classes中选择Application,Range,Workbook,Workbooks,Worksheet,Worksheets后确认。
    2)在App::InitInstance()中增加com初始化。  
     if (CoInitialize(NULL)!=0)
        {
            AfxMessageBox("初始化COM支持库失败!");
            exit(1);
        }
       com的释放
    CoUninitialize();
    3)在dlg.cpp中添加
    #include "xl5en32.h"
    4)将如下代码(office 2000 可用代码)
    Application ExcelApp;
    Workbooks wbsMyBooks;
    Workbook wbMyBook;
    Worksheets wssMysheets;
    Worksheet wsMysheet;
    Range rgMyRge;    
    //创建Excel 2000服务器(启动Excel)
    if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
    {
        AfxMessageBox("创建Excel服务失败!");
        exit(1);
    }
    //ExcelApp.SetVisible(false);
    VARIANT tmp;
    tmp.boolVal=false;
    ExcelApp.SetVisible(tmp);

    //利用模板文件建立新文档
    char path[MAX_PATH];
    GetCurrentDirectory(MAX_PATH,path);
    CString strPath = path;
    strPath += "//template1";
   
    wbsMyBooks.AttachDispatch(ExcelApp.GetActiveWorkbook(),true);
    wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t(strPath)));
    //得到Worksheets
    wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
    //得到sheet1
    wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
    //添加模板个数
    for(int i=0;i<4;i++){
        wsMysheet.Copy(vtMissing,_variant_t(wsMysheet));
    }
    CString str1;
    wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
    str1 = "第1页";
    wsMysheet.SetName(str1);
    for(i=0;i<wssMysheets.GetCount()-1;i++){
        wsMysheet = wsMysheet.GetNext();
        str1.Format("第%d页",i+2);
        wsMysheet.SetName(str1);
    }
    wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("第1页")),true);
    //得到全部Cells,此时,rgMyRge是cells的集合
    rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);
    //设置1行1列的单元的值
    CString str=_TEXT("21:12");
    rgMyRge.SetItem(_variant_t((long)7),_variant_t((long)3),_variant_t(str));
    rgMyRge.SetItem(_variant_t((long)9),_variant_t((long)3),_variant_t(str));
    rgMyRge.SetItem(_variant_t((long)7),_variant_t((long)4),_variant_t(str));
    rgMyRge.SetItem(_variant_t((long)8),_variant_t((long)4),_variant_t(str));
    rgMyRge.SetItem(_variant_t((long)9),_variant_t((long)4),_variant_t(str));
    rgMyRge.SetItem(_variant_t((long)10),_variant_t((long)4),_variant_t(str));
    rgMyRge.SetItem(_variant_t((long)11),_variant_t((long)4),_variant_t(str));
    rgMyRge.SetItem(_variant_t((long)12),_variant_t((long)4),_variant_t(str));
    //将表格保存
    strPath = path;
    strPath += "//ylhexcel.xls";
    wsMysheet.SaveAs(strPath,vtMissing,vtMissing,vtMissing,vtMissing,
        vtMissing,vtMissing,vtMissing,vtMissing);
    ExcelApp.SetVisible(true);
    wbMyBook.PrintPreview(_variant_t(false));
    //释放对象
    rgMyRge.ReleaseDispatch();
    wsMysheet.ReleaseDispatch();
    wssMysheets.ReleaseDispatch();
    wbMyBook.ReleaseDispatch();
    wbsMyBooks.ReleaseDispatch();
    ExcelApp.ReleaseDispatch();
    这样之后会有很多异常。
    验证了和office 的版本有关系。
3、基于Excel文件格式的控制。 
    暂时还没有试。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值