要使用 MFC 使 Excel 和使用数组填充区域

 

第一步: 创建一个对话框程序:

请按步骤 1 到 12 Microsoft 知识库文章以创建示例项目, 使用 IDispatch 接口和成员函数 Excel8.olb 类型库中定义了以下文章中:

178749 (http://support.microsoft.com/kb/178749/EN-US/) 如何创建自动化项目使用 MFC 和类型库
 

第二步: 增加几个控件:

在步骤 4 和 5 的父项目创建到对话框 178749 (http://support.microsoft.com/kb/178749/EN-US/) 添加下列控件与属性所指定。 还添加相应成员变量:

     Control   Name              Variable Type         Variable Name
      -----------------------------------------------------------------
      Edit      IDC_STARTINGCELL  m_sStartingCell       CString
      Edit      IDC_NUMROWS       m_iNumRows            short
      Edit      IDC_NUMCOLS       m_iNumCols            short
      CheckBox  IDC_STRING        m_bFillWithStrings    BOOL
    

 

第三步:  增加头文件

在添加到 AutoProjectDlg.cpp 文件, 顶部添加以下行:     #include "excel8.h"   

 

第四步:  添加如下代码 : 

 // OLE Variant for Optional.
      COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

      _Application objApp;

      _Workbook objBook;
      Workbooks objBooks;
      Worksheets objSheets;
      _Worksheet objSheet;
      Range range;

      if(!UpdateData(TRUE))
      {
         return;
      }

      // Instantiate Excel and start a new workbook.
      objApp.CreateDispatch("Excel.Application");
      objBooks = objApp.GetWorkbooks();
      objBook = objBooks.Add(VOptional);
      objSheets = objBook.GetWorksheets();
      objSheet = objSheets.GetItem(COleVariant((short)1));

      //Get the range where the starting cell has the address
      //m_sStartingCell and it's dimensions are m_iNumRows x m_iNumCols.
      range = objSheet.GetRange(COleVariant(m_sStartingCell),
                                COleVariant(m_sStartingCell));
      range = range.GetResize(COleVariant(m_iNumRows),
                              COleVariant(m_iNumCols));

      //*** Fill the range with an array of values.

      //Create the SAFEARRAY.
      COleSafeArray saRet;
      DWORD numElements[2];
      numElements[0]= m_iNumRows;   //Number of rows in the range.
      numElements[1]= m_iNumCols;   //Number of columns in the range.

      if(m_bFillWithStrings)
      {
         saRet.Create(VT_BSTR, 2, numElements);
      }
      else
      {
         saRet.Create(VT_R8, 2, numElements);
      }

      //Fill the SAFEARRAY.
      long index[2];
      long iRow;
      long iCol;

      for(iRow=0;iRow<=m_iNumRows-1;iRow++)
      {
         for(iCol=0;iCol<=m_iNumCols-1;iCol++)
         {
            index[0] = iRow;
            index[1] = iCol;
            if(m_bFillWithStrings)      //Fill with Strings.
            {
               VARIANT v;
               CString s;
               VariantInit(&v);
               v.vt = VT_BSTR;
               s.Format("r%dc%d", iRow, iCol);
               v.bstrVal = s.AllocSysString();
               saRet.PutElement(index, v.bstrVal);
               SysFreeString(v.bstrVal);
               VariantClear(&v);
            }
            else                     //Fill with Numbers.
            {
               double d;
               d = (iRow*1000) + iCol;
               saRet.PutElement(index, &d);
            }
         }
      }

      //Set the range value to the SAFEARRAY.
      range.SetValue(COleVariant(saRet));
      saRet.Detach();

      //Return control of Excel to the user.
      objApp.SetVisible(TRUE);
      objApp.SetUserControl(TRUE);
 

 第五步: 编译并运行该项目
 

 第六步: 设置参数1,查看结果

为控件对话框上指定下列值:

 Control               Contents
      ------------------------------
      IDC_STARTINGCELL      A1
      IDC_NUMROWS           10
      IDC_NUMCOLS           5
      IDC_STRING            True

单击确定。

结果: 生成一个新工作簿而且的第一工作表单元格 A1:E10 已填充了字符串值。

 
 第七步: 设置参数2,查看结果 
   为控件对话框上指定下列值: 
      Control               Contents
      ------------------------------
      IDC_STARTINGCELL      C3
      IDC_NUMROWS           2
      IDC_NUMCOLS           9
      IDC_STRING            False
						
单击确定。

结果: 生成一个新工作簿而且的第一工作表单元格 C3:K4 已填充了数值。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VC(Visual C++)是一种编程语言,而MFCMicrosoft Foundation Class)是一种C++的库,它提供了一系列的类和函数来开发Windows应用程序。在使用MFC操作Excel文件时,我们通常可以利用COM(Component Object Model)来实现。 首先,我们需要在项目中引入Excel的类型库,然后通过MFC的类COleDispatchDriver来实例化Excel应用程序对象。通过调用相关的函数和方法,我们可以打开Excel文件、读取或写入数据、格式化单元格等操作。 具体操作步骤如下: 1. 在项目的stdafx.h中添加以下代码来引入Excel类型库: ``` #import "path_to_Excel_tlb" named_guids ``` 2. 在需要操作Excel的地方,首先实例化Excel应用程序对象: ``` CApplication excel; excel.CreateDispatch(_T("Excel.Application")); ``` 3. 打开Excel文件并激活工作簿: ``` Workbooks workbooks; Workbook workbook; Worksheets worksheets; Worksheet worksheet; workbooks = excel.get_Workbooks(); workbook = workbooks.Open(_T("path_to_excel_file")); worksheets = workbook.get_Worksheets(); worksheet = worksheets.get_Item(COleVariant((short)1)); worksheet.Activate(); ``` 4. 对Excel文件进行读取或写入操作: ``` // 读取单元格数据 Range range; range = worksheet.get_Range(COleVariant(_T("A1"))); CString value = range.get_Value(); // 写入单元格数据 range.put_Value(COleVariant(_T("Hello, World!"))); ``` 5. 对Excel文件进行格式化操作: ``` // 设置单元格字体样式 range.put_FontName(COleVariant(_T("Arial"))); range.put_FontSize(12); // 设置单元格边框样式 Borders borders = range.get_Borders(); for (int i = 1; i <= 4; i++) { Border border = borders.get_Item(COleVariant((short)i)); border.put_LineStyle(xlContinuous); border.put_Weight(xlThin); } ``` 6. 最后,记得关闭Excel工作簿和退出Excel应用程序: ``` workbook.Close(); excel.Quit(); ``` 通过上述步骤,我们可以使用VC的MFC来操作Excel文件,实现了读取、写入和格式化等功能。当然,在实际应用中,还可以根据需求进行更多的操作和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值