MFC输出EXCEL文档的过程总结

于目前的工作内容涉及到了几处需要输出EXCEL表格的内容,因此在网上也查找了些资料,在下面总结下,以方便使用;

1、当你输出的内容已经在输出的时候全部知道,并且输出格式已经固定,那么你就可以使用下面的方法输出,用if( (pfile = fopen(strFileName, "wb+")) != NULL)
打开EXCEL,然后在其中用fprintf写入,用\T到下一个单元格,用\n到下一行;适合输出内容固定,格式固定的内容。

void CRqEquipReqView::SaveDxcFileXLS(CString strFileName, BOOL bSaveAsAll)
{
    FILE *pfile = NULL;
    CString strGroupName;
 
    CString strMain, strSlave;
    CString strMainName, strMainCreateTime, strMainDirection, strMainCap, strMainStatus; 
    CString strMainSrc, strMainSrcAccess, strMainSrcConGroup;
    CString strMainDst, strMainDstAccess, strMainDstConGroup;
 
    CString strProName, strProCreateTime, strProDirection, strProCap, strProStatus;
    CString strProSrc, strProSrcAccess, strProSrcConGroup;
    CString strProDst, strProDstAccess, strProDstConGroup;
 
    strMain.LoadString(IDS_RQNLPCT_MAIN);
    strSlave.LoadString(IDS_RQNLPCT_SLAVE);
    if(m_pRqGroup)
    {
        strGroupName = m_pRqGroup->GetName();
    }
    int MainCount = m_lstDxc.GetItemCount();
    int ProCount = m_lstProtDxc.GetItemCount();
//参数中带'b'的话是以二进制文件形式打开文件, 否则是以文本文件打开.
//以文本文件形式打开时, 值26就作为EOF了, 前者则不会.
//如果不是保存成文本形式的话, 切记加上'b'
//"a "模式在添加数据前并不清除EOF标志,添加数据后用MS-DOS的TYPE命令只能显示数据到原来EOF标志,而并不会显示后来添加的. 
//"a+ "模式会清除EOF标志,添加数据后,用MS-DOS的TYPE命令能显示所有的数据."a+ "模式需要以CTRL+Z EOF标志结束的流输入.
    if( (pfile = fopen(strFileName, "wb+")) != NULL) 
    {    
        fprintf(pfile, strGroupName + "-" + strMain + "\n");
        CString strItem;
        strItem.LoadString(IDS_RQSUBNET_DXCNAME);
        fprintf(pfile, strItem + "\t");
        strItem.LoadString(IDS_RQSUBNET_DXCCAP);
        fprintf(pfile, strItem + "\t");
        strItem.LoadString(IDS_RQSUBNET_DXCDIR);
        fprintf(pfile, strItem + "\t");
        strItem.LoadString(IDS_RQSUBNET_SRCCARD);
        fprintf(pfile, strItem + "\t");
        strItem.LoadString(IDS_RQSUBNET_SRCAP);
        fprintf(pfile, strItem + "\t");
        strItem.LoadString(IDS_RQSUBNET_SRCCONNECTGROUP);
        fprintf(pfile, strItem + "\t");
        strItem.LoadString(IDS_RQSUBNET_DSTCARD);
        fprintf(pfile, strItem + "\t");
        strItem.LoadString(IDS_RQSUBNET_DSTAP);
        fprintf(pfile, strItem + "\t");
        strItem.LoadString(IDS_RQSUBNET_DSTCONNECTGROUP);
        fprintf(pfile, strItem + "\t");
        strItem.LoadString(IDS_STATUS);
        fprintf(pfile, strItem + "\t");
        strItem.LoadString(IDS_DXCCREATETIME);
        fprintf(pfile, strItem + "\t\n");
 
        CRqNeDxc rqNeDxc;
        for(int mainDxc = 0; mainDxc < m_lstDxc.GetItemCount(); mainDxc++)
        {
            int iDxcID = m_lstDxc.GetItemData(mainDxc);
            if (!m_bSingle)
            {
                if(iDxcID < m_vRqNeDxcBiDsp.size()) 
                {
                    rqNeDxc = m_vRqNeDxcBiDsp[iDxcID];    
                }
                else
                {
                    rqNeDxc = m_vRqNeDxcUniDsp[iDxcID - m_vRqNeDxcBiDsp.size()];
                }
            }
            else
            {
                rqNeDxc = m_vRqDxc[iDxcID];
            }
            if(!bSaveAsAll && !rqNeDxc.GetSelected())
            {
                continue;
            }
            strMainName = m_lstDxc.GetItemText(mainDxc, NAMECOL);
            strMainCap = m_lstDxc.GetItemText(mainDxc, CAPCOL);
            strMainDirection = m_lstDxc.GetItemText(mainDxc, DIRCOL);
            strMainSrc = m_lstDxc.GetItemText(mainDxc, SRCCARDCOL);
            strMainSrcAccess = m_lstDxc.GetItemText(mainDxc, SRCTU12COL);
            strMainSrcAccess = "  " + strMainSrcAccess;
            strMainSrcAccess += "  ";
            strMainSrcConGroup = m_lstDxc.GetItemText(mainDxc, SRCCONGROUPCOL);
            
            strMainDst = m_lstDxc.GetItemText(mainDxc, DSTCARDCOL);
            strMainDstAccess = m_lstDxc.GetItemText(mainDxc, DSTTU12COL);
            strMainDstAccess = "  " + strMainDstAccess;
            strMainDstAccess += "  ";
            strMainDstConGroup = m_lstDxc.GetItemText(mainDxc, DSTCONGROUPCOL);
            strMainStatus = m_lstDxc.GetItemText(mainDxc, ENABLE);
            strMainCreateTime = m_lstDxc.GetItemText(mainDxc, CREATETIME);
 
            fprintf(pfile, strMainName + "\t");
            fprintf(pfile, strMainCap + "\t");
            fprintf(pfile, strMainDirection + "\t");
            fprintf(pfile, strMainSrc + "\t");
            fprintf(pfile, strMainSrcAccess + "\t");
            fprintf(pfile, strMainSrcConGroup + "\t");
            fprintf(pfile, strMainDst + "\t");
            fprintf(pfile, strMainDstAccess + "\t");
            fprintf(pfile, strMainDstConGroup + "\t");
            fprintf(pfile, strMainStatus + "\t");
            fprintf(pfile, strMainCreateTime + "\t\n");
        }
        if(ProCount == 0)
        {
            CString strTmp;
            strTmp.LoadString(IDS_NOPROTSERVICE);
            fprintf(pfile, strGroupName + "-" + strSlave + "(" + strTmp + ")" + "\n");
        }
        else
        {
            fprintf(pfile, strGroupName + "-" + strSlave + "\n");
        }
        for(int proDxc = 0; proDxc < m_lstProtDxc.GetItemCount(); proDxc++)
        {
            int iDxcID = m_lstProtDxc.GetItemData(proDxc);
            if (!m_bSingle)
            {
                rqNeDxc = m_vRqNeDxcUniDsp_ForProList[iDxcID];
            }
            else
            {
                rqNeDxc = m_vRqDxc[iDxcID];
            }
            if(!bSaveAsAll && !rqNeDxc.GetSelected())
            {
                continue;
            }
            strProName = m_lstProtDxc.GetItemText(proDxc, NAMECOL);
            strProCap = m_lstProtDxc.GetItemText(proDxc, CAPCOL);
            strProDirection = m_lstProtDxc.GetItemText(proDxc, DIRCOL);
            strProSrc = m_lstProtDxc.GetItemText(proDxc, SRCCARDCOL);
            strProSrcAccess = m_lstProtDxc.GetItemText(proDxc, SRCTU12COL);
            strProSrcAccess = "  " + strProSrcAccess;
            strProSrcAccess += "  ";
            strProSrcConGroup = m_lstProtDxc.GetItemText(proDxc, SRCCONGROUPCOL);
            
            strProDst = m_lstProtDxc.GetItemText(proDxc, DSTCARDCOL);
            strProDstAccess = m_lstProtDxc.GetItemText(proDxc, DSTTU12COL);
            strProDstAccess = "  " + strProDstAccess;
            strProDstAccess += "  ";
            strProDstConGroup = m_lstProtDxc.GetItemText(proDxc, DSTCONGROUPCOL);
            strProStatus = m_lstProtDxc.GetItemText(proDxc, ENABLE);
            strProCreateTime = m_lstProtDxc.GetItemText(proDxc, CREATETIME);
            
            fprintf(pfile, strProName + "\t");
            fprintf(pfile, strProCap + "\t");
            fprintf(pfile, strProDirection + "\t");
            fprintf(pfile, strProSrc + "\t");
            fprintf(pfile, strProSrcAccess + "\t");
            fprintf(pfile, strProSrcConGroup + "\t");
            fprintf(pfile, strProDst + "\t");
            fprintf(pfile, strProDstAccess + "\t");
            fprintf(pfile, strProDstConGroup + "\t");
            fprintf(pfile, strProStatus + "\t");
            fprintf(pfile, strProCreateTime + "\t\n");
        }
        fclose(pfile);
    }
    else
    {
        CString strmsg;
        strmsg.LoadString(IDS_CLOSEEXCEL);
        AfxMessageBox(strmsg, 0, 0);
    }
}
2、 这种输入方式,适合后台输出,不需要打开EXCEL文件,不需要选择输出路径,只是后台自己默默的记录EXCEL文件。
    CString sFile,sPath;
    CString strChuType   =  "-";
    CString strChuStatus =  "-";                             
 
    GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);       //获取主程序所在路径,存在sPath中
    sPath.ReleaseBuffer ();
    int nPos;
    nPos=sPath.ReverseFind ('\\');
    sPath=sPath.Left (nPos);    
    sFile = sPath + "\\ServerOption";  
    sFile = sFile +"\\ChuStatusRecord";
    sFile = sFile + "\\" + pGroup->GetNeName() +"(" +TheUser.GetCurrentUserName() + ")"+".xls";
    HANDLE hFile = CreateFile(sFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
    if (hFile == INVALID_HANDLE_VALUE)
    {
        HRESULT hr = GetLastError();
        if ( ERROR_ACCESS_DENIED == hr || ERROR_SHARING_VIOLATION == hr)
        {
            return ;
        }
    } 
    else
    {
        // 文件未被打开
        CloseHandle(hFile);
    }
    CString strSheet, str;
    CStringArray sampleArray, testRow;
    CSpreadSheet SS(sFile, "CHU");        //新建Excel文件名及路径,TestSheet为内部表名
    SS.BeginTransaction();
    sampleArray.RemoveAll();      
    str.LoadString(IDS_EQUIPTYPE);                  //设备类型
    sampleArray.Add(str);
    str.LoadString(IDS_NE_NAME);                    //设备名称
    sampleArray.Add(str);
    str.LoadString(IDS_EQP_DLDIP);                    //设备地址
    sampleArray.Add(str);
    str.LoadString(IDS_SLOT);                        //槽号
    sampleArray.Add(str);
    str.LoadString(IDS_CHUNO);                        //话路编号
    sampleArray.Add(str);
    str.LoadString(IDS_CHNTYPE);                    //话路类型
    sampleArray.Add(str);
    str.LoadString(IDS_CHU_STATUS);                    //话路状态
    sampleArray.Add(str);
    str.LoadString(IDS_ALMLISTBEGINTIME);            //开始时间
    sampleArray.Add(str);
    str.LoadString(IDS_ALMLISTENDTIME);                //结束时间
    sampleArray.Add(str);
    SS.AddHeaders(sampleArray);
 
    CHHCardBase* pCardBase = dynamic_cast<CHHCardBase*>(pGroup->DBase->GetSuperCardBase(ucSystemCardSlot));
    if( pCardBase != NULL )
    {        
        BYTE bCount = pParam[5];
        int OFFSET = 6;
        for (int index = 0; index < bCount ; index++)
        {
            BYTE bChuNo = pParam[OFFSET++];
            BYTE bChuType = pParam[OFFSET++];
            BYTE bChuStatus = pParam[OFFSET++];
 
            CHHPort* pPort = pCardBase->GetPortByType( bChuNo, Port_CHU );
            if( pPort == NULL )
                continue;
            CHHChuIfModule* pModule = dynamic_cast<CHHChuIfModule*>(pPort->GetModule( Mod_ChuIf ));
            if( pModule == NULL )
                continue;
 
            str.Empty();
            sampleArray.RemoveAll();
            str = pGroup->GetSeriesName();
            sampleArray.Add(str);
            str = pGroup->GetNeName();
            sampleArray.Add(str);
            str = pGroup->GetNeAddressStr();
            sampleArray.Add(str);
            str.Format("%d", bSlot+1);
            sampleArray.Add(str);
            str.Format("CHU-%d", bChuNo +1);
            sampleArray.Add(str);
            
            strChuType = GetChuTypeString(bChuType);
            if (bChuType == 0 || bChuType == 4 || bChuType == 5 ||bChuType == 6)
            {
                strChuStatus = GetChuStatusString(bChuStatus);
            }
            else
            {
                strChuStatus = "-";
            }
            sampleArray.Add(strChuType);
            sampleArray.Add(strChuStatus);
            
            CTime time;
            time=CTime::GetCurrentTime();
            str.Format("%d-%d-%d-%d:%d:%d",time.GetYear(),time.GetMonth(),time.GetDay(),time.GetHour(), time.GetMinute(), time.GetSecond());    
            sampleArray.Add(str);
            sampleArray.Add("-");
            int iRow = SS.GetTotalRows() + 1;
            SS.AddRow(sampleArray, iRow, true);
            int iExcelRow = pModule->GetExcelRow();
            if (iExcelRow != 0)
            {
                SS.AddCell(str, 9, iExcelRow );
            }
            pModule->SetExcelRow(iRow);
        }
        SS.Commit();
3、适合用于将界面上的内容所见及所得的输出,可以设置单元格的的合并,大小,字体,颜色等等;
void CFileRecord::OutPutToExcelForMFD(GROUP* pGroup)        
{
    // TODO: Add extra validation here
    //用m_ExlApp对象创建Excel2003进程 
 
       if(!m_ExlApp.CreateDispatch("Excel.Application",NULL))
       { 
              AfxMessageBox("创建Excel服务失败!");
              return;
       } 
 
       //设置为可见 
       m_ExlApp.SetVisible(TRUE); 
 
       ///下面得到应用程序所在的路径/// 
        CString theAppPath,sPath, strSheet;                            
        GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
        sPath.ReleaseBuffer ();
        int nPos;
        nPos=sPath.ReverseFind ('\\');
        sPath=sPath.Left (nPos);    
        theAppPath = sPath + "\\System\\";  
     
    
    
       CString TempPath=""; 
 
       TempPath=theAppPath+"Template.xls";//EXCEL模板的路径 
 
       m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks(),TRUE); 
 
       m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)TempPath),TRUE);//加载EXCEL模板 
 
       m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);//加载Sheet页面 
 
       //添加新的Sheet页面 
       m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((long)1),vtMissing); 
 
       //删除第二个Sheet页面 
       m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)2)),TRUE); 
       m_ExlSheet.Delete(); 
 
       //把第一个Sheet页面的名字改变为TestSheet 
       m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)1)),TRUE); 
       strSheet.LoadString(IDS_CHUFACTORYSETTING);
       m_ExlSheet.SetName(strSheet); 
 
 
       ///合并第一行单元格A1至D1// 
 
       //加载要合并的单元格 
       m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("H2")),TRUE); 
 
       m_ExlRge.Merge(_variant_t((long)0)); 
 
       设置表格内容 
 
       m_ExlRge.AttachDispatch(m_ExlSheet.GetCells(),TRUE);//加载所有单元格 
 
       m_ExlRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t(strSheet));             
 
       DBASE *pDBase = pGroup->DBase;
       if(pDBase == NULL)
       {
           return;
       }
       int nConfirmNum = pDBase->GetCardCount();   //设备拥有的槽数
       if (nConfirmNum == 0)
       {
            return;
       }
       int nMaxChuCount = 0;             //设备单盘拥有的最大话路数
       CString strChuType   =  "-";
       CString strChuStatus =  "-";
       CString str,strCtrl;
       int iTempCount = 0;    
       for(int iSlot=1; iSlot <= nConfirmNum; iSlot++)
       {    
           str.LoadString(IDS_STRINGCHANNEL);
           strCtrl.LoadString(IDS_SLOT);
           str = strCtrl+ "|" + str;
           m_ExlRge.SetItem(_variant_t((long)(3)),_variant_t((long)1),_variant_t(str)); 
 
           str.Format("%d:",iSlot);
           strCtrl.LoadString(IDS_SLOT);
           str = strCtrl+str;
           m_ExlRge.SetItem(_variant_t((long)(3+iSlot)),_variant_t((long)1),_variant_t(str)); 
 
           CHHCardBase *pCardBaseCtrl = dynamic_cast<CHHCardBase*>( pDBase->GetSuperCardBase(iSlot));
           if (pCardBaseCtrl != NULL)
           {
               int iSlotCtrl = 0;
               if (pGroup->GetExtModelID() == MFA)   //MFA特殊处理
               {
                   switch(iSlot)
                   {
                   case 1: iSlotCtrl = 1;
                       break;
                   case 2: iSlotCtrl = 2;
                       break;
                   case 3: iSlotCtrl = 3;
                       break;
                   case 4: iSlotCtrl = 4;
                       break;
                   case 5: iSlotCtrl = 24;
                       break;
                   case 6: iSlotCtrl = 23;
                       break;
                   case 7: iSlotCtrl = 22;
                       break;
                   case 8: iSlotCtrl = 21;
                       break;
                   case 9: iSlotCtrl = 14;
                       break;
                   case 10:iSlotCtrl = 13;
                       break;
                   case 11:iSlotCtrl = 12;
                       break;
                   case 12:iSlotCtrl = 11;
                       break;
                   case 13:iSlotCtrl = 13;
                       break;
                   case 14:iSlotCtrl = 14;
                       break;
                    }
               }
               else
               {
                   switch(iSlot)
                   {
                   case 1: iSlotCtrl = 1;
                       break;
                   case 2: iSlotCtrl = 2;
                       break;
                   case 3: iSlotCtrl = 3;
                       break;
                   case 4: iSlotCtrl = 24;
                       break;
                   case 5: iSlotCtrl = 23;
                       break;
                   case 6: iSlotCtrl = 22;
                       break;
                   case 7: iSlotCtrl = 21;
                       break;
                   case 8: iSlotCtrl = 14;
                       break;
                   case 9: iSlotCtrl = 13;
                       break;
                   case 10:iSlotCtrl = 12;
                       break;
                   case 11:iSlotCtrl = 11;
                       break;
                   case 12:iSlotCtrl = 12;
                       break;
                   case 13:iSlotCtrl = 13;
                       break;
                   case 14:iSlotCtrl = 14;
                       break;
                   }
               }    
               strCtrl = pCardBaseCtrl->GetCardTypeName();
               str.Format("%d:%s",iSlotCtrl,strCtrl);
               strCtrl.LoadString(IDS_SLOT);
               str = strCtrl+str;
               m_ExlRge.SetItem(_variant_t((long)(3+iSlot)),_variant_t((long)1),_variant_t(str));  
           }
       }
       CHHCardBase *pCardBase = dynamic_cast<CHHCardBase*>( pDBase->GetSuperCardBase(ucSystemCardSlot));  //系统盘
       if (pCardBase != NULL)
       {
            int iChuCount = pCardBase->GetSpecifyPortCount(Port_CHU);
            for (int iChuNum = 0 ; iChuNum < iChuCount ; iChuNum++)
            {
               int iChuType = 0xff;
               int iChuStatus = 0xff;
               CHHPort* pChuPort = pCardBase->GetPortByType( iChuNum, Port_CHU );
               if (pChuPort != NULL)
               {
                   int iChuNumCtrl =0;
                   int iSlotCtrl = 0;
                   if (iChuNum < 30)
                   {
                       iChuNumCtrl = iChuNum%8;
                       iSlotCtrl = 10- iChuNum/8;
                   }
                   else
                   {
                       iChuNumCtrl = (iChuNum+2)%8;
                       iSlotCtrl = 10 - (iChuNum+2)/8 ;
                   }                       
                   if(!pChuPort->GetPortIsUsedForChu())
                   {
                       continue;
                   }
                   CHHChuIfModule *pModule = dynamic_cast<CHHChuIfModule*>(pChuPort->GetModule(Mod_ChuIf));
                   if(pModule == NULL)
                   {                
                       continue;
                   }
                   iChuType = pModule->GetChuType(TRUE);
                   str.Format("%d", iChuNumCtrl+1);
                   str = "CH"+ str;
                   m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)(2+iChuNumCtrl)),_variant_t(str));
                   str = GetChuTypeString(iChuType);
                   if (pGroup->GetExtModelID() == MFA)   //MFA特殊处理
                   {
                       m_ExlRge.SetItem(_variant_t((long)(5+iSlotCtrl)),_variant_t((long)(2+iChuNumCtrl)),_variant_t(str));
                   }
                   else
                   {
                        m_ExlRge.SetItem(_variant_t((long)(4+iSlotCtrl)),_variant_t((long)(2+iChuNumCtrl)),_variant_t(str));
                   }
                   if (iChuNumCtrl >= nMaxChuCount)
                   {
                       nMaxChuCount = iChuNumCtrl +1;
                   }
               }
            }
       }
       
       //加载要合并的单元格 
       switch (nMaxChuCount)
       {
       case 8:
           m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("I2")),TRUE); 
           
           m_ExlRge.Merge(_variant_t((long)0)); 
           break;
       case 10:
           m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("K2")),TRUE); 
           
           m_ExlRge.Merge(_variant_t((long)0)); 
           break;
       case 16:
           m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("Q2")),TRUE); 
           
           m_ExlRge.Merge(_variant_t((long)0)); 
           break;
           
       }  
       设置表格内容 
 
 
 
       m_ExlRge.AttachDispatch(m_ExlSheet.GetUsedRange());//加载已使用的单元格 
       m_ExlRge.SetWrapText(_variant_t((long)1));//设置单元格内的文本为自动换行 
 
       //设置齐方式为水平垂直居中 
       //水平对齐:默认=1,居中=-4108,左=-4131,右=-4152 
       //垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107 
       m_ExlRge.SetHorizontalAlignment(_variant_t((long)-4108)); 
       m_ExlRge.SetVerticalAlignment(_variant_t((long)-4108)); 
 
       ///设置整体的字体、字号及颜色// 
 
       Font ft; 
 
       ft.AttachDispatch(m_ExlRge.GetFont()); 
 
       ft.SetName(_variant_t("宋体"));//字体 
       ft.SetColorIndex(_variant_t((long)1));//字的颜色 
       ft.SetSize(_variant_t((long)10));//字号 
 
       ///设置标题字体及颜色// 
 
       m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("H2"))); 
 
       ft.AttachDispatch(m_ExlRge.GetFont()); 
 
       ft.SetBold(_variant_t((long)1));//粗体 
       ft.SetSize(_variant_t((long)13)); 
       ft.SetColorIndex(_variant_t((long)1)); 
 
       CellFormat cf; 
       cf.AttachDispatch(m_ExlRge.GetCells()); 
 
//        //设置底色/ 
// 
//        Interior it; 
// 
//        it.AttachDispatch(m_ExlRge.GetInterior()); 
// 
//        it.SetColorIndex(_variant_t((long)11));//标题底色 
// 
//        表格内容的底色 
// 
//        m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A2"),_variant_t("D5"))); 
// 
//        it.AttachDispatch(m_ExlRge.GetInterior()); 
// 
//        it.SetColorIndex(_variant_t((long)15)); 
 
 
       //为表格设置边框/ 
 
       Range UnitRge; 
       CString CellName; 
 
       for(int i=1;i<=nConfirmNum+3;i++) 
       { 
              for(int j=1;j<=nMaxChuCount+1;j++) 
              {     
                     CellName.Format("%c%d",j+64,i);//单元格的名称 
 
                     UnitRge.AttachDispatch(m_ExlRge.GetRange(_variant_t(CellName),_variant_t(CellName)));//加载单元格 
 
                     //LineStyle=线型 Weight=线宽 ColorIndex=线的颜色(-4105为自动) 
                     UnitRge.BorderAround(_variant_t((long)1),_variant_t((long)2),_variant_t((long)-4105),vtMissing);//设置边框 
              } 
       } 
 
 
       //释放对象(相当重要!) 
       m_ExlRge.ReleaseDispatch(); 
       m_ExlSheet.ReleaseDispatch(); 
       m_ExlSheets.ReleaseDispatch(); 
       m_ExlBook.ReleaseDispatch(); 
       m_ExlBooks.ReleaseDispatch(); 
       //m_ExlApp一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错 
       m_ExlApp.ReleaseDispatch(); 
 
       //退出程序 
       m_ExlApp.Quit(); 
    
//    CDialog::OnOK();
}
 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值