我现在在做一个管理软件,用的是VC++6.0+SQL数据库,我想问的是系统运行过后出现一个数据列表,如何将这个数据表中的数据导入到EXCEL中呢,就是在运行C++程序时通过一个控件就可以将数据导入到EXCEL中。

解决方案 »

  1.   

    COleVariant
          covTrue((short)TRUE),
          covFalse((short)FALSE),
          covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);   _Application app;
       Workbooks books;
       _Workbook book;
       Worksheets sheets;
       _Worksheet sheet;
       Range range;
       Font font;
       Range cols;
       Range resizedrange;
       Interior interior;
       Borders borders;
       Border bottomborder;   // Start Excel and get an Application object.
       if(!app.CreateDispatch("Excel.Application"))
       {
          AfxMessageBox("Couldn't start Excel and get Application object.");
          return;
       }   //Get a new workbook.
       books = app.GetWorkbooks();
       book = books.Add (covOptional);   //Get the first sheet.
       sheets =book.GetSheets();
       sheet = sheets.GetItem(COleVariant((short)1));   //Fill cells A1, B1, C1, and D1 one cell at a time with "headers".
       range = sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
       range.SetValue2(COleVariant("First Name"));
       range = sheet.GetRange(COleVariant("B1"),COleVariant("B1"));
       range.SetValue2(COleVariant("Last Name"));
       range = sheet.GetRange(COleVariant("C1"),COleVariant("C1"));
       range.SetValue2(COleVariant("Full Name"));
       range = sheet.GetRange(COleVariant("D1"),COleVariant("D1"));
       range.SetValue2(COleVariant("Salary"));   //Format A1:D1 as bold, vertical alignment = center.
       range = sheet.GetRange(COleVariant("A1"), COleVariant("D1"));
       font = range.GetFont();
       font.SetBold(covTrue);
       range.SetVerticalAlignment(
          COleVariant((short)-4108));   //xlVAlignCenter = -4108   //Fill A2:B6 with an array of values (First & Last Names).
       {
          COleSafeArray saRet;
          DWORD numElements[]={5,2};   //5x2 element array
          saRet.Create(VT_BSTR, 2, numElements);
          //Fill the 5x2 SafeArray with the following data:
          //   John      Smith
          //   Tom       Brown
          //   Sue       Thomas
          //   Jane      Jones
          //   Adam      Johnson      FillSafeArray(L"John", 0, 0, &saRet);
          FillSafeArray(L"Smith", 0, 1, &saRet);
          FillSafeArray(L"Tom", 1, 0, &saRet);
          FillSafeArray(L"Brown", 1, 1, &saRet);
          FillSafeArray(L"Sue", 2, 0, &saRet);
          FillSafeArray(L"Thomas", 2, 1, &saRet);      FillSafeArray(L"Jane", 3, 0, &saRet);
          FillSafeArray(L"Jones", 3, 1, &saRet);
          FillSafeArray(L"Adam", 4, 0, &saRet);
          FillSafeArray(L"Johnson", 4, 1, &saRet);      range = sheet.GetRange(COleVariant("A2"), COleVariant("B6"));
          range.SetValue2(COleVariant(saRet));//这样设置值, 真是太方便了      saRet.Detach();//donot forget to do so
       }   //Fill C2:C6 with a relative formula (=A2 & " " & B2).
       range = sheet.GetRange(COleVariant("C2"), COleVariant("C6"));
       range.SetFormula(COleVariant("=A2 & \" \" & B2"));   //Fill D2:D6 with a formula(=RAND()*100000) and apply a number
       //format.
       range = sheet.GetRange(COleVariant("D2"), COleVariant("D6"));
       range.SetFormula(COleVariant("=RAND()*100000"));
       range.SetNumberFormat(COleVariant("$0.00"));   //AutoFit columns A:D.
       range = sheet.GetRange(COleVariant("A1"), COleVariant("D1"));
       cols = range.GetEntireColumn();
       cols.AutoFit();   //Manipulate a variable number of columns for Quarterly Sales Data.
       {
          short NumQtrs;
          CString msg;      //Determine how many quarters to display data for.
          for(NumQtrs=1;NumQtrs<=3;NumQtrs++)
          {
             msg.Format("Enter sales data for %d quarter(s)?", NumQtrs);
             if(AfxMessageBox(msg,MB_YESNO)==IDYES)
             {
                break;
             }
          }
          msg.Format("Displaying data for %d quarters.", NumQtrs);
          AfxMessageBox(msg);      //Starting at E1, fill headers for the number of columns selected.
          range = sheet.GetRange(COleVariant("E1"), COleVariant("E1"));
          resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
          resizedrange.SetFormula(
             COleVariant("=\"Q\" & COLUMN()-4 & CHAR(10) & \"Sales\""));
          //Change the Orientation and WrapText properties for the headers.
          resizedrange.SetOrientation(COleVariant((short)38));
          resizedrange.SetWrapText(covTrue);
          //Fill the interior color of the headers.
          interior = resizedrange.GetInterior();
          interior.SetColorIndex(COleVariant((short)36));      //Fill the columns with a formula and apply a number format.
          range = sheet.GetRange(COleVariant("E2"), COleVariant("E6"));
          resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
          resizedrange.SetFormula(COleVariant("=RAND()*100"));
          resizedrange.SetNumberFormat(COleVariant("$0.00"));      //Apply borders to the Sales data and headers.
          range = sheet.GetRange(COleVariant("E1"), COleVariant("E6"));
          resizedrange= range.GetResize(covOptional, COleVariant(NumQtrs));
          borders = resizedrange.GetBorders();
          borders.SetWeight(COleVariant((short)2));   //xlThin = 2      //Add a Totals formula for the Quarterly sales data and apply a
          //border.
          range = sheet.GetRange(COleVariant("E8"), COleVariant("E8"));
          resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
          resizedrange.SetFormula(COleVariant("=SUM(E2:E6)"));
          borders = resizedrange.GetBorders();
          {
             bottomborder = borders.GetItem((long)9);
             bottomborder.SetLineStyle(
                COleVariant((short)-4119));   //xlDouble = -4119
             bottomborder.SetWeight(
                COleVariant((short)4));       //xlThick = 4
          }
       }   //Make the application visible and give the user control of
       //Excel.
       app.SetVisible(TRUE);
       app.SetUserControl(TRUE);
      

  2.   

    void CMyDlg::WriteToExcel()
    {
      CDatabase database;
      CString sDriver = "MICROSOFT EXCEL DRIVER(*.XLS)";
      CString sExcelFile = "c:\\demo.xls";
      CString sSql;
      TRY
      {
      // 创建进行存取的字符串
       sSql.Format("DRIVER = {%s}; DSN =";FIRSTROWHASNAMES = 1; READONLY = FALSE ;  CREATE_DB=\"%S\;DBQ=%S", sDriver, sExcelFile , sExcelFile);   // 创建数据库,即Excel表格
      if(database.OpenEx(sSql, CDatabase::noOdbcDialog))
      {
        sSql = "CREATE TABLE demo(Name TEXT, Age NUMBER";
        database.ExecuteSQL(sSql);    // 插入数值
        sSql = "INSERT INTO demo(Name, Age) VALUES ("张宇", 28)";
        database.ExecuteSQL(sSql);    sSql = "INSERT INTO demo(Name, Age) VALUES ("陈慧琳", 27)";
        database.ExecuteSQL(sSql);
        //...   }
       database.Close();
      }
     CATCH_ALL(e)
     {
        TRACE("EXCEL 驱动没有安装:%s", sDriver);
      }
    }
      

  3.   

    进vc/mfc区,点击右上角的"搜索"搜索"excel",有很多帖子,可能会对你有用本人最近也在做相关的东西,共勉一下