CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

一个很菜的问题:确定Excel的路径

楼主sxbyl(sxbyl)2000-12-11 17:23:00 在 VC/MFC / 基础类 提问

有没有一个比较通用快速的方法确定Excel.EXE在什么地方? 问题点数:90、回复次数:12Top

1 楼Feicker()回复于 2000-12-11 19:01:00 得分 0

如果你想要运行   Excel的文件的话,直接用ShellExecute(handle,   "open",   “???.exl",   NULL,   NULL,   SW_SHOWNORMAL);即可  
   
  Top

2 楼sxbyl(sxbyl)回复于 2000-12-12 09:09:00 得分 0

问题是ShellExecute要等到关闭Excel才进行下一步操作,而我的操作需要在Excel运行时进行操作,我用的是CreateProcess,但PATH里还没有Excel,所以必须指定完整的路径名。  
  另外:我是在不支持MFC的ATL中调用Excel的,要完成的功能很简单,就是从粘贴板拷些东西进去,有什么比较好的方法?我现在的方法是模拟键盘操作:先是右Ctrl键左面的那个键,然后是P键,虽可工作,但要弹出菜单,太难看。本来想输入Ctrl+V,但那个Ctrl键死活输不进去,只能完成一个V键。用Spy++跟踪了半天也没发现WM_COMMAND     如果水有更好的方法解决此问题,分数自然大大的!Top

3 楼AtCsdn()回复于 2000-12-12 11:41:00 得分 40

  用注册表。  
      path   存放在注册表的HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\App   Paths\Excel.exe键下,取出该键下相应的值即可。  
      如果关于注册表的编程还不太清楚,可Email   me:   bsliu78@263.netTop

4 楼sxbyl(sxbyl)回复于 2000-12-12 11:52:00 得分 0

多谢AtCsdn!!!现路径问题已解决!不知第二个问题有什么好的方法?Top

5 楼vcmfc(【痛苦的虫虫】)回复于 2000-12-12 11:58:00 得分 0

为啥不用COM来操作Excel,是不是觉得麻烦?Top

6 楼vcmfc(【痛苦的虫虫】)回复于 2000-12-12 12:01:00 得分 0

小弟这两天在学习COM,可以的话我可以帮你做这个功能,我也可以正好练一练:vcmfc@sina.comTop

7 楼vcmfc(【痛苦的虫虫】)回复于 2000-12-12 12:02:00 得分 20

这可是我一个个打进去的,来自《软件报》.  
  如何通过一个程序给另外一个程序发送快捷键命令?(临时方法)  
   
  答:WM_KEYDOWN消息一次只能发送一个击键消息,不适合发送组合键。如果需要给另外一个运行的程序模拟快捷键,可以直接向其发命令消息WM_COMMAND,方法如下:(假设对方程序为B,我们需要编制的程序为A)  
          1.运行B程序,再启动VC所带的工具软件SPY++。选择SPY++的菜单命令   SPY->Message,调出“Message   Options"对话框。  
          2.在WINDOW选项页中利用其窗口查找工具查到B程序的窗口句柄,因为B程序很有可能有多个窗口,子窗口(如MFC文档/视窗/框架类应用程序),因此要在"Additional   Windows"中打开"Windows   of   Same   Process"开关。  
          3.接下来设置"Message"选项页,在Messages   to   View中只选择WM_COMMAND消息,其它的消息全部清除。这样做的因为,当程序中检测到快捷键组合键时,会发送WM_COMMAND消息。  
          4."Output"选项页不用更多的设置,直接接收其缺省值即可。设置完后按"OK"按钮,这时SPY++开始监测B程序中的所有WM_COMMAND消息。  
          5.激活B程序,并在其中按下Ctrl+N组合键为有效的快捷键,便会触发WM_COMMAND消息,这时在SPY++的监视窗口中会看到至少一条WM_COMMAND消息,找到其中含有Send   From   an   accelerator字样的WM_COMMAND消息,双击该消息,会弹出消息属性对话框,其中会显示消息的窗口句柄wParam、lParam等参数。记录下wParam、lParam,作为模拟快捷键消息的参数。单击其中的窗口句柄参数,还会显示该窗口属性的对话框,记下其中标题、类名称等窗口属性,以便于在A程序中查找和获得该窗口的句柄。  
          6.在A程序中添加向B发送模拟快捷键的代码,其步骤大致为:利用标题、类名称等,通过FindWindow函数获取B中响应快捷键的窗口。调用SendMesage函数向该窗口发送WM_COMMAND消息,wParam、lParam参数为第5步中记录的值。Top

8 楼sxbyl(sxbyl)回复于 2000-12-12 12:17:00 得分 0

用COM很简单,今天上午我就完成了一个用COM实现的版本,而且效果比昨天用的方法好,可老大说最好不要用COM,所以我只得继续以前的方法了。  
  至于Excel的跟踪我是打开所有消息进行观察的,就是没有那个WM_COMMAND,你可以试一下,而且Excel的菜单好像不是正规的菜单,好象是M$自己搞的一个东西。我用VC以资源的方式打开Excel,也没有菜单资源:(Top

9 楼sxbyl(sxbyl)回复于 2000-12-12 12:24:00 得分 0

对了,还有,我连Excel的工作区窗口都跟踪过了,无所获,先发送Ctrl键,在发送V键的方法也试过,都不行。发送WM_COMMAND的方法昨天我就在IE中实现了Top

10 楼bgsn(不告诉你)回复于 2000-12-12 12:58:00 得分 15

<pre>  
   
  1.   FindExecutable()  
   
  2.最好使用Excel   Automation,代码如下:  
   
  #include   "stdafx.h"  
   
  //   Assumes   Office   97   has   been   installed   in   "G:\Program   Files"  
  #define   IMPATTRS   rename("DocumentProperties",   "DocProps")  
  #import   &lt;G:\Program   Files\Microsoft   Office\Office\mso97.dll&gt;   IMPATTRS  
  #import   &lt;G:\Program   Files\Microsoft   Office\Office\excel8.olb&gt;   IMPATTRS   rename("DialogBox",   "DialogBoxXL")   rename("RGB",   "RBG_XL")  
  #include   &lt;stdio.h&gt;  
  #include   &lt;docobj.h&gt;  
  #pragma   hdrstop()  
   
  class   OleInit   {  
  public:  
          OleInit()   {   OleInitialize(NULL);   }  
          ~OleInit()   {   OleUninitialize();   }  
  }   OleInitGlobal;  
   
  void   dump_com_error(_com_error   &);  
  void   main()  
  {  
          try    
  {  
                  using   namespace   Excel;  
                  _ApplicationPtr   pXL("Excel.Application");  
                  pXL-&gt;Visible   =   true;  
                  WorkbooksPtr   pBooks   =   pXL-&gt;Workbooks;  
                  _WorkbookPtr     pBook     =   pBooks-&gt;Add((long)xlWorksheet);  
  _WorksheetPtr   pSheet   =   pXL-&gt;ActiveSheet;  
  pSheet-&gt;Paste();  
   
  //See   what   happened  
                  Sleep(5000);  
   
                  pBook-&gt;Saved   =   true;  
                  pXL-&gt;Quit();  
          }  
  catch(_com_error   &e)    
  {  
                  dump_com_error(e);  
          }  
  }  
  void   dump_com_error(_com_error   &e)  
  {  
          printf("Oops   -   hit   an   error!\n");  
          printf("\tCode   =   %08lx\n",   e.Error());  
          printf("\tWCode   =   %04x\n",   e.WCode());  
          printf("\tCode   meaning   =   %s\n",   e.ErrorMessage());  
          _bstr_t   bstrSource(e.Source());  
          _bstr_t   bstrDescription(e.Description());  
          printf("\tSource   =   %S\n",   (wchar_t*)bstrSource);  
          printf("\tDescription   =   %S\n",   (wchar_t*)bstrDescription);  
  }  
  </pre>Top

11 楼sxbyl(sxbyl)回复于 2000-12-12 13:11:00 得分 0

To:bgsn   不好意思,你是不是没看我最后的的两条回复啊?现在的要求是不使用COM和MFCTop

12 楼ssawgift(恩承四季)回复于 2000-12-12 13:17:00 得分 15

HKEY_CLASSES_ROOT\CLSID\{00020812-0000-0000-C000-000000000046}\LocalServer32Top

相关问题

  • WebForm+EXCEL :Response.WriteFile(excel文件路径)问题
  • 如何确定文件的路径?
  • 确定路径的问题。fallstone(天蓝)
  • 怎样确定文件路径???
  • [菜鸟高分求助]如何求得有向图中确定两点间所有不重复的路径
  • 在vba中怎样新建一个excel文件,新文件的文件名和路径都是由用户来确定的
  • 菜鸟100分求救---文件路径和url路径相关
  • excel中,用BrowseForFolder显示路径时,如何能显示上次的路径
  • 请问,用DELPHI怎么确定当前APP所在的路径?
  • 读写文件的相对路径确定?

关键词

  • excel
  • office
  • program
  • microsoft
  • null
  • pbook
  • impattrs
  • oleinit
  • pxl
  • 注册表

得分解答快速导航

  • 帖主:sxbyl
  • AtCsdn
  • vcmfc
  • bgsn
  • ssawgift

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo