精华内容
下载资源
问答
  • MFC OLE拖放实现

    2018-04-18 18:01:20
    最近研究了一下剪贴板,然后根据网上的http://blog.csdn.net/sendy888/article/details/1747899和...自己写的一个MFC Dialog程序。第二篇文章中: 在Windows的资源管理器中,选中一个活多个文...

    最近研究了一下剪贴板,然后根据网上的

    http://blog.csdn.net/sendy888/article/details/1747899http://www.360doc.com/content/12/1012/07/7662927_240964665.shtml这两篇文章。

    自己写的一个MFC Dialog程序。

    第二篇文章中:

            在Windows的资源管理器中,选中一个活多个文件,在文件单击鼠标右键,在弹出菜单中选复制。再切换到另一个目录,单击鼠标右键,点粘贴。接这样执行了一次文件的拷贝操作,那么Windows在拷贝过程中执行了什么操作,是否将整个文件拷贝到剪贴板上了呢?当然没有。实际上,Windows只是将一个文件结构拷贝到了剪贴板,这个结构如下:

           tDropFile+wenjian1文件名+vcNullChar+文件2文件名+vbNullChar....+文件N文件名+vbNullChar,其中tDropFile是一个DROPFILES结构这个结构在Windows API中有定义。在粘贴文件时,利用API函数DragQueryFile就可以获得拷贝到剪贴板的文件全路径名,然后就可以根据获得的文件名执行文件拷贝函数,实现对文件的粘贴操作。

           在应用中发现拷贝到剪贴板的文件结构的最后一个文件名后面跟的是两个NullChar方能成功。

    遇到的问题:

    文章中-Initialize函数用于注册CListCtrlEx成为拖放接收窗口;但是在CListCtrlEx::Initialize函数中调用 

    m_oleDropTarget.Register(this);

    不能实现拖入操作,然后在CListCtrlEx::OnCreate中调用,结果成功。

    描述:本程序实现的是OLE拖放操作,程序运行生成对话框。

    然后向对话框中拖入文件或文件夹,对话框中CListCtrl显示文件的全路径名。(如果拖入两次同一个文件,会显示两个item)

    拖出CListCtrl中的一个项目,会实现复制操作。

    未解决的问题:

    在CListCtrlEx::OnLvnBeginDrag()函数中,使用了GlobalAlloc开辟空间,但是没有释放掉。如果在m_oleDataSource.DoDragDrop返回之后GLobalFree,那么在第二次托出的时候,程序会崩溃(只能去任务管理器中结束了),暂时没有想到是否应该释放(Windows资源管理器不知会释放吗),应该在什么地方释放。

     生成的exe程序下载地址:http://download.csdn.net/detail/hebeixingxs/6522293

    源代码下载地址:http://download.csdn.net/detail/hebeixingxs/6522203

    展开全文
  • 使用VC++6.0 MFC OLE操作Excel 进行简单的读写 使用VC60 MFC OLE操作Excel 进行简单的读写 - 简单的准备工作 - 所需求的类库 - 写入操作 -读取操作 -总结- 简单的准备工作首先保证VC++6.0在你的电脑上正确地安装,...

    使用VC++6.0 MFC OLE操作Excel 进行简单的读写

    - 简单的准备工作

    首先保证VC++6.0在你的电脑上正确地安装,当然我们用Visual Stdio也是一样的。
    
    然后,我们需要创建一个工程:
    

    CreateMFC

    简单设置之后,我们我们得到一个基于对话框的基本MFC程序。
    

    CreateButton

    双击Dialog上的按钮,添加上OnButtonRead()
    
    当然写入按钮也是相同做法。
    
    如此,我们便完成了准备工作。
    

    - 所需求的类库

    我们需要添加Office OLE操作的相关函数。
    
    可以通过Ctrl+W方式调出类向导
    

    getTypeLib

    选择From a type library 之后,选择自己电脑的Office安装路径(我电脑的环境为Office2013,故文件名为Office15,不清楚自己电脑Office环境对应是多少的可以去网上查下)选择:Excel.exe。
    

    selectExcel

    再次进入类库选择,选择_Application,Sheets(旧版本为WorkSheets,因版本而异),_WorkSheet,_WorkBook,WorkBooks,Range。
    
    确认之后,发现SourceFile里多了excel.h和excel.cpp,这是根据你的需要裁剪好了的支持库。
    
    在当前的ExcelRandWDlg.cpp中加入
    
    /*  ExcelRandWDlg.cpp  */
    #include "excel.h"
    //并设置全局变量
    _Application ExcelApp;
    Workbooks workbooks;
    _Workbook workbook;
    Sheets sheets;        //低版本Office请将这改为 WorkSheets
    _Worksheet sheet;
    Range range;
    

    并在 InitDialog( )函数中加入

    AfxOleInit();

    - 写入操作

    写入操作就是完成按钮响应函数:OnButtonWrite()

    void CExcelRandWDlg::OnButtonWrite() 
    {
        CString strPath;
        COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); 
    
        CFileDialog dlg(true,"配置文件",NULL,0,
            "表格文件(.xlsx)|*.xlsx|表格文件(.xls)|*.xls");
        //打开文件
        if(IDOK==dlg.DoModal())
            strPath =dlg.GetPathName();
        if(!g_app.CreateDispatch("Excel.Application"))
        {
            AfxMessageBox("创建Excel服务失败");
            return;
        }
        //获取所有的工作簿
        g_books = g_app.GetWorkbooks();   
        //用来锁定对应的工作簿           
        g_books.AttachDispatch(g_app.GetWorkbooks(),true);       
        g_book = g_books.Open( strPath,covOptional,covOptional,
              covOptional,covOptional,covOptional,covOptional,
              covOptional,covOptional,covOptional,covOptional,
              covOptional,covOptional,covOptional,covOptional);
    
        //得到Worksheets
        g_sheets.AttachDispatch(g_book.GetWorksheets(),true);
        g_sheet=g_sheets.GetItem(COleVariant((short)1));
    
        //得到全部Cells,此时
    
        //设置5行第一列的单元的值
        g_range=g_sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("A1")));
        g_range.SetValue2(COleVariant(_T("1")));
        g_range=g_sheet.GetRange(COleVariant(_T("A2")),COleVariant(_T("A2")));
        g_range.SetValue2(COleVariant(_T("2")));
        g_range=g_sheet.GetRange(COleVariant(_T("A3")),COleVariant(_T("A3")));
        g_range.SetValue2(COleVariant(_T("3")));
        g_range=g_sheet.GetRange(COleVariant(_T("A4")),COleVariant(_T("A4")));
        g_range.SetValue2(COleVariant(_T("4")));
        g_range=g_sheet.GetRange(COleVariant(_T("A5")),COleVariant(_T("A5")));
        g_range.SetValue2(COleVariant(_T("5")));
         g_book.Save(); //保存
            g_range.ReleaseDispatch(); //退出
        g_sheet.ReleaseDispatch();
        g_sheets.ReleaseDispatch();
        g_book.ReleaseDispatch();
        g_books.ReleaseDispatch();
        g_app.Quit();
        g_app.ReleaseDispatch();
    }

    -读取操作

    即OnButtonRead( )函数

    void CExcelRandWDlg::OnButtonRead() 
    {
        COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 
        VARIANT ret,val;
        CString str,strPath;
        long index[2];
        COleSafeArray ole;
        CFileDialog dlg(true,"配置文件",NULL,0,
            "表格文件(.xlsx)|*.xlsx|表格文件(.xls)|*.xls");//打开文件夹
        if(IDOK==dlg.DoModal())
             strPath = dlg.GetPathName();
        if(!g_app.CreateDispatch("Excel.Application"))
        {
            AfxMessageBox("创建Excel服务失败");
            return;
        }
        //获取所有的工作簿
        g_books = g_app.GetWorkbooks();               
        //打开工作簿
        g_book = g_books.Open(strPath,VOptional,VOptional,        
                 VOptional, VOptional,VOptional,VOptional,
                 VOptional, VOptional,VOptional,VOptional,
                 VOptional, VOptional,VOptional,VOptional);
        //获取所有表
        g_sheets = g_book.GetWorksheets();                
        //得到第一个表 
        g_sheet = g_sheets.GetItem(COleVariant(short(1)));
        g_range = g_sheet.GetRange(COleVariant("A1"), COleVariant("A5")); //设置操作范围
        ret = g_range.GetValue2();
        ole = &ret;
        for(int i=1;i<=5;i++)
        {
            index[0]=i;                         
            //COleSafeArray的引索 行    
            index[1]=1;                         //列
            ole.GetElement(index,&val);
            switch (val.vt)
            {
            case VT_BSTR:
                str.Format((char*)val.bstrVal);
                AfxMessageBox(str);
                break;
            case VT_R8:
                str.Format("%2f",val.dblVal);
                AfxMessageBox(str);
                break;
            default:
                break;
            }
        }
        g_range.ReleaseDispatch();
        g_sheet.ReleaseDispatch();
        g_sheets.ReleaseDispatch();
        g_book.ReleaseDispatch();
        g_books.ReleaseDispatch();
        g_app.Quit();
        g_app.ReleaseDispatch();
    }

    -总结

      当前的这种方法,使用起来感觉速度也不是很快,仅做基础的说明,还是推荐使用C#或者VB的Office外接程序,那样更加方便快捷。
    
    程序中如有出现任何问题和错误,请各位大大不吝指出,感谢大家的支持。
    
                                                 From  左右摇摆CKC
    
    展开全文
  • 先添加图表相关类

    先添加图表相关类

    _Chart ,ChartObjects,ChartObject,Series

    添加方法:

     

    依次添加各个类;

    2.相关代码

                    _Chart  chart;
                    ChartObjects chartObjects;
                    ChartObject charObject;
                    Series series;
                    LPDISPATCH lpDisp;
                    LPDISPATCH lpDispSeries;
    
    		//获取页码
    		sheet1 = m_sheets.GetItem(vThree);
    		m_range = sheet1.GetCells();
    		//获取所有图表
    		lpDisp = sheet1.ChartObjects(covOptional);
    		chartObjects.AttachDispatch(lpDisp);
    		//获取第几个图表
    		lpDisp = chartObjects.Item(_variant_t(long(i+1)));
    		charObject.AttachDispatch(lpDisp);
    		//图表付给单个表
    		chart.AttachDispatch(charObject.GetChart());
    		//获取第几个公式 Serirs
    		lpDispSeries = chart.SeriesCollection(_variant_t(long(1)));
    		//付给公式
    		series.AttachDispatch(lpDispSeries);
    		//重置公式 
               strText.Format("=SERIES(,'1'!$D$%d:$M$%d,'1'!$D$%d:$M$%d,1)",i*nCopyRow+18 ,i*nCopyRow+18, i*nCopyRow+19, i*nCopyRow+19);
    		series.SetFormula(strText);
    		
    		//获取第几个公式 Serirs
    		lpDispSeries = chart.SeriesCollection(_variant_t(long(3)));
    		//付给公式
    		series.AttachDispatch(lpDispSeries);
    		//重置公式
    		strText.Format("=SERIES(\"小\",{0,10.5},('1'!$P$%d,'1'!$P$%d),3)", i*nCopyRow+3, i*nCopyRow+3);
    		series.SetFormula(strText);	

    这是修改公式,如果不修改公式,直接画图,则直接用chart画图即可

    展开全文
  • mfc操作excel方法一般有两种,一种是用odbc操作,另一种就是本文的加入excel类库操作 1. 选择Menu-> View-> ClassWizade,打开ClassWizade窗口,在Automation中,选择Add Class-> From a type library,选择D:\...

    mfc操作excel方法一般有两种,一种是用odbc操作,另一种就是本文的加入excel类库操作

    1.   
    选择Menu-> View-> ClassWizade,打开ClassWizade窗口,在Automation中,选择Add Class-> From a type library,选择D:\Program Files\Microsoft Office\office\Excel.exe(D:\Program Files\Microsoft Office\是本机上Microsoft Office 2000的安装目录,可根据个人机器上的实际安装目录修改)。选择_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,加入新类,(个人一般是全部都加上,因为不知道哪个有啥用微笑)分别为_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,头文件Excel9.h,源文件Excel9.cpp。   
    2.InitInstance()里
      if(!AfxOleInit())
     {
      AfxMessageBox("初始化OLE出错!");
      return FALSE;
     }

     3.
    在ExcelTestDlg.cpp文件的头部,#include "ExcelTestDlg.h "语句之下,

    增加 :   
    #include "Excel9.h "   (看你导入后生成头文件是啥,我之前导07 ,就是Excel.h)

    4.

    ExcelTestDlg.cpp文件中需要加的地方加上

    [cpp]  view plain copy
    1.     _Application app;      
    2.     Workbooks books;  
    3.     _Workbook book;  
    4.     Worksheets sheets;  
    5.     _Worksheet sheet;  
    6.   
    7.     LPDISPATCH lpDisp;      
    8.   
    9.     Range range;  
    10.     Font font;  
    11.     Range cols;  
    12.     COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);  
    13.       
    14.     if(!app.CreateDispatch("Excel.Application"))   
    15.      
    16.         AfxMessageBox("无法启动Excel服务器!");  
    17.         return 
    18.      
    19.           
    20.          
    21.       
    22.     Range usedRange;  
    23.     usedRange.AttachDispatch(sheet.GetUsedRange());  
    24.     range.AttachDispatch(usedRange.GetRows());  
    25.     long iRowNum=range.GetCount();                   //已经使用的行数  
    26.       
    27. range.AttachDispatch(sheet.GetCells(),true);   //得到所有元素  
    28.     //******************  
    29.     CString a;  
    30.     a.Format("%d",iRowNum);  
    31. //  AfxMessageBox(a);  
    32.   
    33.         range.SetItem(COleVariant((long)(iRowNum+1)),COleVariant((long)1),COleVariant("fuck1"));  
    34.         range.SetItem(COleVariant((long)(iRowNum+1)),COleVariant((long)2),COleVariant("fuck1"));  
    35.         range.SetItem(COleVariant((long)(iRowNum+1)),COleVariant((long)3),COleVariant("fuck1"));  
    36.         range.SetItem(COleVariant((long)(iRowNum+1)),COleVariant((long)4),COleVariant("fuck1"));  
    37.   
    38.         book.Save();  
    39.   
    40.         book.Close(covOptional,COleVariant("C:\\\\1.xls"),covOptional);  
    41.  books.Close();        
    42.  app.Quit();   


    我在c盘建了个1.xls

    备注:使用vc6.0 excel 03没问题,使用excel 07 时也可以就是类导入的位置不一样,在D:\Program Files\Microsoft Office\Office12中,直接导excel.exe就行了,然后在c盘建个表格,保存为97-03兼容模式就ok了

    5.

    4中是写,读取时如下

     

    [cpp]  view plain copy
    1. _Application app,pApp;  
    2. pApp.AttachDispatch(range.GetItem(COleVariant((long)(iRowNum)),COleVariant((long)(1))).pdispVal,true);  
    3. CString b;  
    4. b=pApp.GetValue();  
    5. AfxMessageBox(b);  
    展开全文
  • VS2019MFC使用OLE操作EXCEL遇到的问题 1.在用MFC操作EXCEL文件时,使用普遍的添加OLE文件类操作EXCEL的方式在此版本已经无法正常添加了,可能是从VS2015版开始就无法用此操作方式添加OLE文件类。一般用此方式添加...
  • 今天看MFC代码,不懂什么是ole库。 /// 初始化 OLE 库 if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; }
  • CRT, WinApi, MFC, OLE

    2011-07-28 11:47:52
    静态 .lib = 动态 .lib + .dll CRT: (core, old io, new io, plum Hall) msvcrt.dllWinApi : ( core: KERNEL32.dll; CDC: GDI32.dll; NT: NTDL
  • MFCOLE的初始化问题

    2014-11-17 11:10:41
    在写一个动态,共享MFC,导出接口是C方式的; 在dll中有对话框资源,该对话框包含一个CTreeCtrl控件; 要实现tree节点的拖拽功能;所以用到了COleDataSource; 可是问题来了: 程序运行后,鼠标拖拽tree节点, 在拖拽...
  • VC++ 2005 建一个MFC工程,运行没有出现此问题: 添加一个Windows应用程序,提示CLR组件添加...OLE初始化失败,请确保OLE库是正确的版本s 转载于:https://www.cnblogs.com/guojing/archive/2011/11/17/2252164.html...
  • MFC中使用OLE/COM操作EXCEL的方法

    千次阅读 2015-12-17 19:25:31
    excel作为OLE/COM插件,定义好了各类交互接口,而且这些接口是跨语言的,可以导入这些接口,操作excel,本问主要实现excel的读写,所以需要_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range这...
  • 总体上要实现的功能就是读写Excel文件,于是自己就开始在网上找读写Excel的方法,首先看到了C/C++读写Excel的几种方法,说是读写的方法有很多,但是反正就是各有利弊,我就选择了以OLE的方式进行Excel的操作(这种...
  • 注释// 初始化 OLE /*if (!AfxOleInit()){AfxMessageBox(IDP_OLE_INIT_FAILED);return FALSE;}*/ 转载于:https://www.cnblogs.com/lovemyhuangmei/p/3191086.html
  • MFC工程使用MFC库

    2017-10-30 13:36:35
    MFC工程使用MFC库时,可参考以下步骤 1、工程设置中,将MFC的使用由原来的“使用标准windows”改为“在共享DLL中使用MFC”(VC71) 如果是英文版,相关选项是: Microsoft Foundation Classes: Use MFC in a ...
  • VS2010/MFC 利用OLE读写excel操作时,手动打开其他excel文档程序崩掉的问题解决
  • MFC 工程中使用 MFC 需求说明 C++ 工程的类型有很多,从 VS (或 VC) 可以看到常见的有: Win32 Console Application、MFC Application、Win32 Project 等。在创建 MFC 工程时,通过 IDE 的向导会自动帮我们...
  • MFC库

    2016-06-28 19:44:00
    MFC实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎。VC++是Windows下开发人员使用的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件...
  • 常见MFC UI界面

    2019-02-01 21:08:05
    常见MFC UI界面
  • AfxMessageBox("无法初始化COM的动态连接!");                 return  ;           }            //*****   //创建Excel  2000服务器(启动Excel)   if(!app.CreateDispatch...
  • MFC富文本编辑框richedit插入图片ole对象问题 学习了三四天的一点成果,如果有不对的地方还请指出。 目前发现有两种方法来向richedit中插入ole对象: 1.直接粘贴,然后使用回调函数来控制即将插入的ole对象。 2.自己...
  • MFC、WTL 、ATL、STL联系与区别 这个要先从C++和VC++说起! c++是一门语言,它与平台无关。只要能提供c++编译器(或者交叉编译器)的平台,就能用c++编程。基本上常见的操作系统都有C++编译器或交叉编译器,所以你...
  • MFC UI界面

    千次阅读 2019-01-03 14:04:43
    Xtrme toolkit,BCGControlBar,SkinMagic,AppFace,Skin++,Uskin++,SYGUI,LibUIDK,GuiToolkit,GardenUI等等,除了后两种一个是开源,一个是免费的外,...http://www.codeproject.com/KB/MFC/UltimateToolbo...
  • 如何向预先存在的 MFC 应用程序添加 OLE 拖放功能注意:这篇文章是由无人工介入的自动的机器翻译系统翻译完成。这些文章是微软为不懂英语的用户提供的, 以使他们能够理解这些文章的内容。微软不保证机器翻译的正确度...
  • COM,ATL,WTL,OLE,STL,MFC

    2018-07-07 14:00:19
    [标准模版] The Standard Template Library (STL) is a C++ software library which heavily influenced many parts of the C++ Standard Library. It provides four components called algorithms, containers, ...
  • MFC操作excel存取数据全步骤(OLE/COM)

    千次阅读 2017-06-02 12:13:38
    1) excel合成需要如下步骤:通过MFC工程的类向导添加类,并从现有类库中选择(from a type library),在弹出的对话框中选择office的excel.exe(或者是excel.olb),这里必须是office,而不能是wps,(对应得是et....
  • 近期在忙一个小项目(和同学一起搞的),在这里客户要求不但读写txt,而且可以读写excel文件,...笔者环境:win7 64+VS2012+Office2013+MFC。 说明:读写excel文件,通常包括1. ODBC 数据库实现;2.通过解析 Ex

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,534
精华内容 3,013
关键字:

mfcole库