没有捷径,一个单元格一个单元格的输出。可以输出到以“,”分隔的文本文件(.csv),或者使用COM方式启动Excel,再往里面写数据。

解决方案 »

  1.   

    如果你是用ADO访问数据库的,可以尝试Excel组件中的Range类中的函数CopyFromRecordset 
    第一个参数就用_RecordsetPtr
      

  2.   

    在C#中可以通过引用Excel.dll和vbide.dll,使用excel.dll中的Range类输出到excel.c++中没有弄过,不太清楚
      

  3.   


    #include "excel9.h"COleVariant VOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
    _Application objApp;
    Workbooks objBooks;
    _Workbook objBook;
    Worksheets objSheets;
    _Worksheet objSheet;
    Range objRange;
    objApp.CreateDispatch("Excel.Application");
    objBooks = objApp.GetWorkbooks();
    objBook.AttachDispatch(objBooks.Add(_variant_t("c:\\Dialog12.xls")));
    objSheets = objBook.GetSheets();
    objSheet = objSheets.GetItem((_variant_t)short(1));
    objRange.AttachDispatch(objSheet.GetCells(),true);
    int ss,nn;
    double dTotal;
    CString cc;
    nn = m_adodc1.GetRecordset().GetRecordCount();
    CColumns cls;
    cls = m_datagrid.GetColumns();
    ss = cls.GetCount();
    for(int i = 0; i < nn; i++)
    {
    m_datagrid.SetRow(i);
    for(int j = 0; j < ss; j++)
    {
    m_datagrid.SetCol(j);
    cc = m_datagrid.GetText();
    if(i == 9)
    dTotal = dTotal + atoi(cc);
    objRange.SetItem(_variant_t((long)(i+2)),_variant_t((long)(j+1)),_variant_t(cc));
    }
    }
    objApp.SetVisible(true);
    objSheet.ReleaseDispatch();
    objSheets.ReleaseDispatch();
    objBook.ReleaseDispatch();
    objBooks.ReleaseDispatch();
    objApp.ReleaseDispatch();
      

  4.   

    To: goodboyws(深夜不眠者(VCMVP)) 我在执行 选择Menu->View->ClassWizade,打开ClassWizade窗口,选择Add Class->From a type library,选择D:\Program Files\Microsoft Office\office10\Excel9.OLB 时没有找到Excel9.OLB 文件,不就没有Excel9.h了,那应该怎么办啊?能不能说的具体一点啊?
      

  5.   

    To:sin6007() 我是用ADO访问数据库的,Excel组件中的Range类是怎么加进去的,我在msdn中找不到CopyFromRecordset函数啊?
      

  6.   

    XL5CHS32.OLB应该是这个吧, 有很多类,你选中其中几个就可以了。application,range,workbooks,workbook,worksheets,worksheet
      

  7.   

    To:sin6007() 
         我的office是xp的,我用的是excel.exe,选择_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,用的是下面的代码:void CExcelTestDlg::OnExceltest()  

    _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); 

    //利用模板文件建立新文档 
    wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true); 
    wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t("g:\\exceltest\\MyTemplate.xlt"))); 
    //得到Worksheets 
    wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true); 
    //得到sheet1 
    wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true); 
    //得到全部Cells,此时,rgMyRge是cells的集合 
    rgMyRge.AttachDispatch(wsMysheet.GetCells(),true); 
    //设置1行1列的单元的值 
    rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("This Is A Excel Test Program!")); 
    //得到所有的列 
    rgMyRge.AttachDispatch(wsMysheet.GetColumns(),true); 
    //得到第一列 
    rgMyRge.AttachDispatch(rgMyRge.GetItem(_variant_t((long)1),vtMissing).pdispVal,true); 
    //设置列宽 
    rgMyRge.SetColumnWidth(_variant_t((long)200)); 
    //调用模板中预先存放的宏 
    ExcelApp.Run(_variant_t("CopyRow"),_variant_t((long)10),vtMissing,vtMissing, 
    vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, 
    vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, 
    vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, 
    vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing); 
    //打印预览 
    wbMyBook.SetSaved(true); 
    ExcelApp.SetVisible(true); 
    wbMyBook.PrintPreview(_variant_t(false)); 
    //释放对象 
    rgMyRge.ReleaseDispatch(); 
    wsMysheet.ReleaseDispatch(); 
    wssMysheets.ReleaseDispatch(); 
    wbMyBook.ReleaseDispatch(); 
    wbsMyBooks.ReleaseDispatch(); 
    ExcelApp.ReleaseDispatch(); 
    } 但是当文件导出的时候,弹出对话框说“未找到宏“CopyRow””,后来看导出的文件时这一句This Is A Excel Test Program!在文件中已经被导出了,说明下面的代码有些问题,但我不知道怎么改,请大家帮我改改把,谢谢
    ExcelApp.Run(_variant_t("CopyRow"),_variant_t((long)10),vtMissing,vtMissing, 
    vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, 
    vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, 
    vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, 
    vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);