精华内容
下载资源
问答
  • MFC C++ Excel 导出 打印

    热门讨论 2008-07-09 16:15:17
    MFC C++ Excel 导出 打印
  • 6.0MFC操作EXCEL

    2012-08-24 10:09:31
    一段关于MFC读写EXCEL的程序 请各位笑纳
  • MFC怎么实现点击按钮打印一个已经存在的.xlsx文件?直接打印表格内容的话会很乱,所有我想能不能这样实现:把数据存入表格后再打印。但是没有怎么实现打印表格文件的思路,求解!
  • MFC输出excel

    2018-03-12 13:19:10
    该方法比较简单 1、直接操作excel表比较麻烦,所以将输出文件改为.csv的形式输出 CString path=FindTheModuleFile(); CFile file; CFileException exp; CString strF...
    该方法比较简单
    1、直接操作excel表比较麻烦,所以将输出文件改为.csv的形式输出
    CString path=FindTheModuleFile();
    CFile file;
    CFileException exp;
    CString strFileName = path+_T("\\excel\\表.csv");
    FILE *fp;
    fp=fopen((CT2A)strFileName,"w+");
    2、然后只需要进行文本操作就可以,直接用fprintf()函数格式化输入数据就可以
    例如:
    fprintf(fp,"%f,%f,%d%%,,,",test1,simu1,compare1);
    fprintf(fp,"\n");
    fprintf(fp,"编号,测点,,");
    注意: 每个逗号代表excel表中的一个单元格,所以输出数据注意调整格式!

    3、输出的文件直接打开即为excel格式,以文本方式打开则可看到写入文本数据的格式。
    展开全文
  • Excel MFC 数据交互 打印 查找 替换 写入 读出 ole 写入txt日记文件 CLogFile
  • MFC输出EXCEL文档的过程总结

    千次阅读 2011-12-09 14:26:13
    由于目前的工作内容涉及到了几处需要输出EXCEL表格的内容,因此在网上也查找了些资料,在下面总结下,以方便使用; 1、当你输出的内容已经在输出的时候全部知道,并且输出格式已经固定,那么你就可以使用下面的方法...

    由于目前的工作内容涉及到了几处需要输出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();
    }

    展开全文
  • mfc excel2007操作问题

    2015-06-01 02:46:39
    问题1: 使用vs2013 在基于对话框的工程中通过类添加选择添加excel 2007类型库,找到office 2007安装路径下的 EXCEL... //一直打印这个信息 exit(1); } } 为何app.CreateDispatch()函数一直失败? 求大神指点!
  • 使用MFC自动化操作Excel文档,对excel所包含的类进行详解,比较全面系统的总结了其中各类的用法
  • MFC提供了一个框架性的打印打印预览功能代码,它的基本思想是将实际显示和打印文档的代码合二为一,即都由此文档关联的CView中的OnDraw(CDC *pDC)来处理,由MFC框架根据用户的操作来决定传进来的pDC是指向屏幕还是...

    MFC提供了一个框架性的打印和打印预览功能代码,它的基本思想是将实际显示和打印文档的代码合二为一,即都由此文档关联的CView中的OnDraw(CDC *pDC)来处理,由MFC框架根据用户的操作来决定传进来的pDC是指向屏幕还是打印机,当pDC指向屏幕设备,就在屏幕上显示文档,当指向打印机设备时就打印文档。这些都很好理解,但是,当我们要打印预览时,传进来的pDC就有些特别了。因为打印预览是在屏幕上进行的,所以通常我们会认为这时传进来的pDC一定也是属于屏幕DC一类的。但是其实不然,这个pDC是根据当前默认的打印机的属性来构造的。举个例子,我的计算机上安装了一个打印机,它的默认打印纸是A4大小(210mm X 297mm),而它的默认分辨率是1200dpi。当打印预览时Cview::OnDraw函数中的pDC指向的就是那个用来预览输出的DC,现在我们调用pDC->GetDeviceCaps(HORZSIZE),pDC->GetDeviceCaps(VERTSIZE),这两个函数用来取得DC显示区域的大小,以毫米为单位,得到的返回值为210和297,这恰好就是A4纸的大小。接着再调用pDC->GetDeviceCaps(HORZRES),pDC->GetDeviceCaps(VERTRES),这两个调用返回的也是DC显示区域的大小,不过单位是象素(或者说是点dot),得到的值是9917和14031。让我们看看这两个值与上面的210和297有什么关系。1英寸等于25.4毫米,那么210毫米的长度按照1200dpi的分辨率能容纳多少点?当然是210/25.4×1200,算算看等于多少?没错,就是9917左右(实际是9921.259……),同样可以将297换算成14031。

    现在来看看另外一个问题。当我们用MemDC.CreateCompatibleDC(pDC)来创建一个与pDC兼容的内存DC时,调用GetDeviceCaps(HORZSIZE)等函数得到的值是否与pDC的一样呢?答案是不一样。对内存DC调用上述4个函数得到的值分别是320和240(Windows一般固定返回这两个数值),1024和768(这正是屏幕的分辨率)。假如pDC的映射模式是MM_LOMETRIC,那么MemDC的映射模式会和它一样吗?还是不一样。MemDC在刚创建的时候映射模式就是默认的MM_TEXT,而不会和pDC一样。那么当执行如下操作:pDC->SetMapMode(MM_LOMETRIC);MemDC.SetMapMode(MM_LOMETRIC);后,对同一个CRect进行DPtoLP,或者LPtoDP得到的结果一样吗?仍然不一样,为什么映射模式相同了,坐标转换的结果还是不一样?

    我们来弄清楚WINDOWS的映射模式到底怎么一回事。对于DC来说有两个区域,一个叫“视口”(Viewport),一个叫“窗口”(Window,与普通的显示出的窗口不一样,只是一个概念)。你可以把“窗口”想象成一个逻辑上的绘图区域,而所谓的逻辑坐标系就是基于“窗口”的。假设以DC的(0,0)点为左上顶点画一个20×20的矩形,你就可以把它理解成在“窗口”中画的,可是度量单位是什么呢?那就要根据DC的当前映射模式来定了,比如现在的模式是MM_LOMETRIC,那么单位就是0.1mm,也就是我们在这个DC上画了一个2mm×2mm大小的矩形。“视口”是一个与实际显示设备紧密相连的概念,它对应着实际的输出区域,设备坐标系就是基于它的,而度量单位则永远是象素。DC根据视口和窗口的属性产生一种规则保证把一个窗口恰好映射为一个视口。待我们真正要显示或打印图形的时候,DC实际上用这种规则把Window坐标(逻辑坐标)映射为Viewport坐标(设备坐标)进行输出,至于DC会把2mm的线段转换为多少象素长的线段,我们无需关心,WINDOWS自会料理一切。CDC分别提供GetViewportOrg(),GetWindowOrg()来取得Viewport和Window的原点坐标(相对于一个假想的中立的坐标系),还有GetViewportExt(),GetWindowExt()来取得Viewport和Window大小(分别基于他们各自的度量单位)。那么DPtoLP和LPtoDP到底做了些什么呢?其实很简单,拿LPtoDP来说就是执行了这样一个运算:

    xViewport=(xWindow-oxWindow)×cxViewport/cxWindow+oxViewport

    yViewport=(yWindow-oyWindow)×cyViewport/cyWindow+oyViewport

    而DPtoLP则是上述运算的逆运算。还拿刚才的pDC,MemDC来说,映射模式都是MM_LOMETRIC,打印设置不变。对pDC调用GetViewportOrg等函数得到Viewport原点为(0,0),大小为9917×-14031象素(没错,是负的,因为MM_LOMETRIC下y轴方向朝上),Window原点为(0,0),大小为2099×2970(0.1mm);同样得到MemDC的Viewport原点为(0,0),大小为1024×-768象素,Window原点为(0,0),大小为3200×2400(0.1mm)。这就可以解释pDC和MemDC的坐标转换为什么不同了。

    展开全文
  • void CExcel1Dlg::OnOK() { // TODO: Add extra validation here COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); _Application
    //建立
    void CExcel1Dlg::OnOK() 
    {
    	// TODO: Add extra validation here
        COleVariant
    		covTrue((short)TRUE),
    		covFalse((short)FALSE),
    		covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    	
        _Application ExcelApp;//excel对象
        Workbooks wbsMyBooks;//工作簿集
        _Workbook wbMyBook;//工作簿
        Worksheets wssMysheets;//表单集
        _Worksheet wsMysheet;//表单
        Range rgMyRge;//
        Range rgMyRgeFormat;//
        LPDISPATCH lpDisp;//
    	
        //创建Excel 2000服务器(启动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);
        //得到sheet1
        wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
        //得到全部Cells,此时,rgMyRge是cells的集合
        rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);
        //设置所有单元格为空
        rgMyRge.SetValue(_variant_t(""));
        CString str,str2;
        str = "****";
        rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)2),_variant_t(str));
        str = "****";
        rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t(str));
        str = "****";
        rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)2),_variant_t(str));
        str = "****";
        rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t(str));
        str = "****";
        rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)4),_variant_t(str));
        str = "****";
        rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)5),_variant_t(str));
        str = "****";
        rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)6),_variant_t(str));
        str = "****";
        rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)7),_variant_t(str));
        str = "****";
        rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)8),_variant_t(str));
    	
    	//    rgMyRge.SetItem(_variant_t((long)3),_variant_t((long)8),_variant_t("12345678901234567890"));
    	
    	//    rgMyRge.SetNumberFormat(_variant_t("0.0"));
    	
    	
    	//设置格式
        lpDisp = wsMysheet.GetRange(_variant_t("B3"),_variant_t("B105"));
        ASSERT(lpDisp);
        rgMyRgeFormat.AttachDispatch(lpDisp);
        rgMyRgeFormat.SetNumberFormat(_variant_t("0"));
    	
    	//设置字体
        Font ft;
        Interior it; //定义背景色变量
        //表头
        lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("H1"));
        rgMyRgeFormat.AttachDispatch(lpDisp);
        ft.AttachDispatch(rgMyRgeFormat.GetFont());
        ft.SetSize(_variant_t((long)20));   //字大小
    	
        lpDisp = wsMysheet.GetRange(_variant_t("A2"),_variant_t("H2"));
        rgMyRgeFormat.AttachDispatch(lpDisp);
        ft.AttachDispatch(rgMyRgeFormat.GetFont());
        ft.SetColorIndex(_variant_t((long)3));   //字颜色
        it.AttachDispatch(rgMyRgeFormat.GetInterior());
        it.SetColorIndex(_variant_t((long)19));     //背景色
    	
    	
        for(i=startrow; i<startrow+NumberofStudent; i++)
        {
            str.Format(_T("A%d"),i);
            str2.Format(_T("H%d"),i);
            if(i%2==0)
            {
                lpDisp = wsMysheet.GetRange(_variant_t(str),_variant_t(str2));
                rgMyRgeFormat.AttachDispatch(lpDisp);
                it.AttachDispatch(rgMyRgeFormat.GetInterior());
                it.SetColorIndex(_variant_t((long)34));     //背景色
            }
        }
    	
        // 3:居中  2:左对齐  1:右对齐
        lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("H2"));
        rgMyRge.AttachDispatch(lpDisp);
        rgMyRge.SetHorizontalAlignment(_variant_t((long)3));
    	
    	//合并单元格
        lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("H1"));
        //ASSERT(lpDisp);
        rgMyRge.AttachDispatch(lpDisp);
        rgMyRge.Merge(_variant_t("0"));
    	
        //设置宽度为自动适应
        //lpDisp = rgMyRge.GetEntireColumn();
        //rgMyRge.AttachDispatch(lpDisp);
        //rgMyRge.AutoFit();
    	
        lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("A1"));
        ASSERT(lpDisp);
        rgMyRge.AttachDispatch(lpDisp);
        lpDisp = rgMyRge.GetEntireRow();
        rgMyRge.AttachDispatch(lpDisp);
        //插入一行
    	//rgMyRge.Insert(_variant_t((long)1));
    	
        //打印预览
        //wbMyBook.PrintPreview(_variant_t(false));
        //释放对象
        ExcelApp.SetVisible(true);//打开表格
    	
        rgMyRge.ReleaseDispatch();
        wsMysheet.ReleaseDispatch();
        wssMysheets.ReleaseDispatch();
        wbMyBook.ReleaseDispatch();
        wbsMyBooks.ReleaseDispatch();
        ExcelApp.ReleaseDispatch();
    	CDialog::OnOK();
    }
    //通过窗口打开已有的表格
    void CExcel1Dlg::OnOpen1() 
    {
    	_Application app;
        Workbooks books;
        _Workbook book;
    	Worksheets sheets;
        _Worksheet sheet; 
    	Range range;
        VARIANT ret; 
    	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    	CFileFind filefind;
    	// TODO: Add your control notification handler code here
    	CString FilePathName;
    	CFileDialog dlg(TRUE, //TRUE为OPEN对话框,FALSE为SAVE AS对话框
            NULL,
            NULL,
            OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
            (LPCTSTR)_TEXT("Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||"),
            NULL);
        if(dlg.DoModal()==IDOK)
    	{
                FilePathName=dlg.GetPathName(); //文件相对路径保存在了FilePathName里
    		app.CreateDispatch("Excel.Application");//开启Excel服务
    		if(!filefind.FindFile(FilePathName))
    		{   
    			AfxMessageBox( "没有找到模版文档,请其查找" );   
    			return;
    		}
    		LPDISPATCH lpDisp;
    		books=app.GetWorkbooks();
    		lpDisp = books.Open(FilePathName,
    			covOptional, covOptional, covOptional, covOptional,
    			covOptional, covOptional, covOptional, covOptional,
    			covOptional, covOptional, covOptional, covOptional
    			);//打开表格
    		//ExcelApp.SetVisible(false);//
    		book.AttachDispatch(lpDisp);//
    		sheets = book.GetWorksheets();
            sheet = sheets.GetItem(COleVariant((short)1)); 
    		range = sheet.GetRange(COleVariant("A1"), COleVariant("C8"));
            ret = range.GetValue(); 
    		COleSafeArray sa(ret);
    		app.SetVisible(true);
    		//app.Quit();  
    		//m_ExlApp一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错   
            //app.ReleaseDispatch(); 
    	}
    }
    如果有不对的地方欢迎大家指正,有的函数我也没有看懂。。。。。。。懂得请解释一下。。。。。。


    展开全文
  • 下面是我引用的,我想在这里面写一个Excel的删除,是指定行的删除,因为,我想打印在数据,然后在把已经读取过的数据删除,在导入,在打印数据,在删除。循环。 在VC中彻底玩转Excel 作者:龚敏 来源...
  • MFC 创建和操作Excel2007 文件

    千次阅读 2014-05-20 12:47:44
    目标: 生成一个excel文件,该文件可以使用exc
  • 三图胜千言: ...//打印领料表 void CKnifeDlgDlg::PrintCurUsedTabel(int order) { // TODO: Add your command handler code here char szFilters[] = "hgy Files (*.xls)|*.xls|All Files...
  • MFC中使用EXCEL API (一)

    万次阅读 2007-03-05 16:56:00
    把网上的一些文章整理了一下把EXCEL9.OLB里的几个常用类库导出,方便使用***************************************************我已导出的类CApplication.h -> _Application接口CWorkbooks.h -> Workbooks接口...
  • //默认打印总的表格数字 protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //EDIT控件 CEdit* pBoxStart; CEdit* pBoxEnd; //}}AFX_VIRTUAL // Implementation protected: ...
  • VC6.0 MFC程序,连接的数据库,现在想要输出一个这样的表格,并填入里面的数据,请问怎么做? [img=https://img-bbs.csdn.net/upload/201708/09/1502242272_552652.png][/img] 2. WPS可以吗,或者EXCEL有版本...
  • 内容索引:VC/C++源码,报表打印,Excel,书签,打印 使用前要将模版文件book2~复制到C盘根目录下,要不然程序会说找不到模板文件。
  • MFC】QRCODE 批量生成 并输出至Excel

    千次阅读 2015-10-22 12:48:25
    项目需要,要求写一个二维码批量打印的小程序。 惯例,上codeproject搜索关于QRCODE相关文章,幸运的是找到这么一篇 http://www.codeproject.com/Articles/593591/Simple-C-Cplusplus-QRCode-Library 将其代码...
  • MFC中将CListCtrl的数据保存为Excel文件

    千次阅读 2012-08-04 17:18:11
    在开发软件时,经常要将数据输出到Excel 2000中,在Excel 2000中对该数据进行进一步地格式化处理或进行计算处理。在Visual Basic中处理起来较简单,Excel 2000的VB编程帮助中有较为详细的介绍。在Visual C++中如何...
  • 使用Excel打印报表

    2013-02-15 13:07:31
    使用MFC语言,连接后台的Excel文件
  • CExcel.h #define CRT_SECURE_NO_WARNINGS #pragma once #include "io.h" //_access函数 #include <Windows.h> #include <shlwapi.h> #include"ExcelData.h" #pragma comment(lib,"Shlwapi.lib")
  • 本控件是一个基于MFC的Grid控件,提供Excel类似的电子表格,可以在对话框或视图中使用。单元格可以是ComboBox、Button、CheckBox、Picture等,支持行列隐藏、排序、打印、Copy、Paste、Drag and Drop等操作。提供源...
  • 在开发软件时,经常要将数据输出到Excel2000中,在Excel2000中对该数据进行进一步地格式化处理或进行计算处理。在VisualBasic中处理起来较简单,Excel2000的VB编程帮助中有较为详细的介绍。在VisualC++中如何进行...
  • 使用OLE的方法操作EXCEL,首先计算机必须安装excel,这样才会有接口暴露出来。本次使用大神封装好的类。 excel作为OLE/COM库插件,定义好了各类交互接口,而且这些接口是跨语言的,可以导入这些接口,操作excel,本...
  • MFC

    千次阅读 2011-08-10 00:13:13
    MFC教程是小雅最怕写的内容,除了水平问题之外,还有一点就是,MFC将许多程序封装起来,使众多程序员在编程时,即使编出了程序,也不知究竟为什么这样就可以了。这一现象使小雅想到当今的Java程序员,许多人在开发...
  • 原文链接:... [cpp] view plain copy print? ...1、将 listcontrol 表中的信息 用 Cfile 函数写入 .txt 中 ,用ODBC来实现excel的写操作。  1、将 listcontrol 表
  • Excel.Application myExcel = new Excel.Application();Excel.Workbook workbookData = myExcel.Application.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);Excel.Worksheet xlSheet = (Worksheet)workbookDa...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 921
精华内容 368
关键字:

mfc打印excel