我的程序里面做了很多数据的统计,然后生成了excel。。现在客户要求在生成的excel里面根据数据再自动生成一张图表(比如柱形图,条形图,曲线图),一下就很明了的看出数据的大体信息。求做过的朋友赐教指点下,如果知道了还望留个言感激不尽。。感激涕零

解决方案 »

  1.   

    按客户的需求建立一个EXCEL模板,程序填数据
    或者在已生成报表的基础上录制宏,手动添加图表,然后把宏修改为代码
      

  2.   

    这张图表是在excel里面还是在另保存为其他格式的
      

  3.   

    COleVariant   
    covTrue((short)TRUE),   
    covFalse((short)FALSE),   
    covOptional((long)DISP_E_PARAMNOTFOUND,   VT_ERROR);   
      /*  
    CApplication   app;   
    CWorkbooks   books;   
    CWorkbook   book;   
    CWorksheets   sheets;   
    CWorksheet   sheet;   
    CRange   range,rootRange;   
        
    //   Start   Excel   and   get   an   Application   object.   
    if(!app.CreateDispatch(_T("Excel.Application")))   
    {   
    MessageBox(MSG_CALLEXCEL_FAILED,MSG_INFOCOLL,MB_ICONWARNING);   
    return   -1;   
    }   
        
    CString   sVersion=app.get_Version();   
    //Get   a   new   workbook.   
    books   =   app.get_Workbooks();   
    book   =   books.Add   (covOptional);//不需要调用模版   
    //Get   the   first   sheet.   
    sheets   =book.get_Sheets();   
    sheet   =   sheets.get_Item(COleVariant((short)1));   
    //row   col   
    long   row   =1,col,columnCount=0;   
    rootRange   =   sheet.get_Range(COleVariant(_T("A1")),COleVariant(_T("A1")));   
    */
    _Application ExcelApp;    // 定义Excel应用程序
    Workbooks    wbsMyBooks;
    _Workbook    wbMyBook;
    Worksheets   wssMysheets;
    _Worksheet   wsMysheet;
    Range        rgMyRge;
    //创建Excel 2003服务器(启动Excel)
    if(!ExcelApp.CreateDispatch("Excel.Application", NULL))
    {
    AfxMessageBox("创建Excel服务失败!");
    exit(1);
    }
    ExcelApp.SetVisible(false);    //隐藏
    wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(), true);
         wbMyBook.AttachDispatch(wbsMyBooks.Add(covOptional)); 
    //得到WorkSheets
    wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(), true);/*
    CString str1 = "第1页";    wsMysheet.SetName(str1);
    for(int i=0; i<wssMysheets.GetCount()-1; i++)
    {
    wsMysheet = wsMysheet.GetNext();
    str1.Format("第%d页", i+2);
    wsMysheet.SetName(str1);
    }
    */
    wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("Sheet2")), true);
    wsMysheet.Delete();
    wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("Sheet1")), true);
    CString tmp,rg;
    for(int j= 1; j <= 4; j++)

    tmp.Format("%d月份", j);
    rg.Format("A%d:A%d", j, j);
    rgMyRge= wsMysheet.GetRange(COleVariant(rg), covOptional);
    rgMyRge.SetValue2(COleVariant(tmp));
    } rgMyRge= wsMysheet.GetRange(COleVariant("B1:b4"), covOptional); 
    rgMyRge.SetFormula(COleVariant("=RAND()*10000"));  Charts charts = wbMyBook.GetCharts();
    _Chart chart1 = charts.Add(vtMissing, vtMissing, COleVariant((short)1));
    // wsMysheet.ChartObjects.AddRef();
    //  _Chart   chart  = charts.GetItem(COleVariant((short)1));   
        chart1.SetChartType((long)51); rgMyRge = wsMysheet.GetRange(COleVariant("A1:B4"), covOptional);
    chart1.SetSourceData(rgMyRge, COleVariant((short)2));
    chart1.Location(long(2),_variant_t("Sheet1")); _Chart chart2 = charts.Add(vtMissing, vtMissing, COleVariant((short)1));
    // wsMysheet.ChartObjects.AddRef();
    //  _Chart   chart  = charts.GetItem(COleVariant((short)1));   
        chart2.SetChartType((long)51);

    rgMyRge = wsMysheet.GetRange(COleVariant("A1:B2"), covOptional);
    chart2.SetSourceData(rgMyRge, COleVariant((short)2));
    chart2.Location(long(2),_variant_t("Sheet1"));
    // chart2.Move(long(9),long(12));
    //    wsMysheet.GetShapes().;
    /*
    rgMyRge = wsMysheet.GetRange(COleVariant("A1:B2"), covOptional);
    chart.SetSourceData(rgMyRge, COleVariant((short)2));
    chart.Location(long(2),_variant_t("Sheet1"));
    */
    /*
    chart.SetHasTitle(TRUE);   
    ChartTitle chartTtl = chart.GetChartTitle();   
    chartTtl.SetText("<-股票涨跌幅分月统计图->");   
    chartTtl.SetShadow(TRUE);   
        
    chart.SetHasLegend(FALSE); 
    */// Series series = chart.SeriesCollection(COleVariant((short)1)); 
    wsMysheet.SetVisible(TRUE); char path[MAX_PATH];
    GetCurrentDirectory(MAX_PATH, path);
    CString strPath = path;
    strPath += "\\1.xls";
    wsMysheet.SaveAs(strPath, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing);  
    wbMyBook.SaveAs(COleVariant(strPath),COleVariant((short)1),COleVariant(_T("")),COleVariant(_T("")),COleVariant((short)0),COleVariant((short)0),   
      0,COleVariant((short)0),COleVariant((short)0),COleVariant((short)0),COleVariant((short)0),COleVariant((short)0));   
    ExcelApp.SetVisible(true);柱状图的,关键代码在上面,用VC添加excel的组件,然后调用里面的函数,找本VC操作excel的文献看看
      

  4.   

    我写的excel封装库 第二版
    http://download.csdn.net/detail/yeah2000/3576494
      

  5.   

    谢谢3楼和4楼。。但3楼的那个我用了不行,我这里没法创建Charts对象,因为我这个excel.h不是excel8.h好像微软有很多版本的api啊