C++将数据导出到Excel

本文介绍了一种利用Excel COM接口从C++应用程序导出数据到Excel文件的方法。通过创建Excel应用实例、设置工作簿及工作表,并填充数据,最后保存并关闭Excel,实现了自动化导出的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 将excel9.h和excel9.cpp拷贝到与代码同一目录下;
  2. 在要导出数据的.cpp文件里加入包含代码:#include “excel9.h”;
  3. 点击项目–鼠标右键–添加–现有项,选中excel9.h,excel9.cpp两个文件,将其名字导入到项目目录下;
  4. 加入以下代码:
    CString strPath;
    CString strFilter;
    strFilter = "Microsoft Office Excel 工作簿(*.xls)|*.xls|";
    CFileDialog dlg(FALSE, "*.lus", NULL, OFN_OVERWRITEPROMPT, strFilter, 0);
    CMainFrame*pmain =(CMainFrame*)AfxGetMainWnd();     

    // 检测操作系统的版本以确定文件对话框的样式
    int structsize=0; 
    DWORD dwVersion,dwWindowsMajorVersion,dwWindowsMinorVersion; 
    dwVersion = GetVersion();       // 检测目前的操作系统
    dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); 
    dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
    if (dwVersion < 0x80000000)     // Windows NT/2000/XP
        structsize =88;             
    else                            
        structsize =76;             // 显示老的文件对话框 
    dlg.m_ofn.lStructSize = structsize; 
    if(dlg.DoModal() == IDOK)
        strPath = dlg.GetPathName();
    else return FALSE;

    CString strPath1;
    strPath1 = "";
    _Application app;    
    Workbooks books;
    _Workbook book;
    Worksheets sheets;
    _Worksheet sheet;
    Range range;

    //创建Excel 2000服务器(启动Excel) 
    if (!app.CreateDispatch("Excel.Application",NULL)) 
    { 
        AfxMessageBox("创建Excel服务失败!"); 
        exit(1); 
    } 
    books.AttachDispatch(app.GetWorkbooks()); 
    book.AttachDispatch(books.Add(_variant_t(strPath1)));
    //得到Worksheets 
    sheets.AttachDispatch(book.GetWorksheets());    
    sheet.AttachDispatch(sheets.GetItem(_variant_t("Sheet1")));
    //得到全部Cells 
    range.AttachDispatch(sheet.GetCells()); 

    CString str;

    int startwave = 400;    // 起始波长
    int wavenum = 31;       // 波长个数

    startwave = 360;    
    wavenum = 39;


    for (int num=0;num<wavenum;num++)
    {
        str.Format(_T("%dnm"),startwave+10*num);
        range.SetItem(_variant_t((long)(1)),_variant_t((long)(num+2)),_variant_t(str));
    }


    str.Format(_T("第%d次:"),1);
    range.SetItem(_variant_t((long)(2)),_variant_t((long)(1)),_variant_t(str));

    for (int num=0;num<wavenum;num++)
    {
        str.Format(_T("%d"),num);
        range.SetItem(_variant_t((long)(2)),_variant_t((long)(num+2)),_variant_t(str));
    }



    LPDISPATCH lpDisp = NULL;
    /*打开一个Sheet,如不存在,就新增一个Sheet*/
    CString strSheetName =_T("Sheet2");
    try
    {
        /*打开一个已有的Sheet*/
        lpDisp =sheets.GetItem(_variant_t(strSheetName));
        sheet.AttachDispatch(lpDisp);
    }
    catch(...)
    {
        /*创建一个新的Sheet*/
        lpDisp = sheets.Add(vtMissing, vtMissing, _variant_t((long)1), vtMissing);
        sheet.AttachDispatch(lpDisp);
        sheet.SetName(strSheetName);
    }

    sheet.AttachDispatch(sheets.GetItem(_variant_t("Sheet2")));
    range.AttachDispatch(sheet.GetCells()); 
    range.SetItem(_variant_t((long)(1)),_variant_t((long)(1)),_variant_t("SCI模式"));
    range.SetItem(_variant_t((long)(1)),_variant_t((long)(2)),_variant_t("积分时间:"));
    str.Format(_T("%d"),123456);    
    range.SetItem(_variant_t((long)(2)),_variant_t((long)(2)),_variant_t(str));
    range.SetItem(_variant_t((long)(1)),_variant_t((long)(3)),_variant_t("累加次数:"));
    str.Format(_T("%d"),0); 
    range.SetItem(_variant_t((long)(2)),_variant_t((long)(3)),_variant_t(str));
    COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);  
    book.SaveAs(COleVariant(_variant_t(strPath)),COleVariant(long(56)),covOptional,covOptional,covOptional,covOptional,0,covOptional,covOptional,covOptional,covOptional);  
    app.SetVisible(FALSE); 
    app.SetUserControl(true);
    //释放对象 
    range.ReleaseDispatch(); 
    sheet.ReleaseDispatch(); 
    sheets.ReleaseDispatch(); 
    book.ReleaseDispatch(); 
    books.ReleaseDispatch();
    books.Close();
    //1.彻底关闭Excel进程
    app.Quit();
    app.ReleaseDispatch(); 
    AfxMessageBox("导出成功!");
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值