| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3535 人关注过本帖
标题:vfp导出到EXCEL出错
只看楼主 加入收藏
msding27
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2008-8-27
结帖率:100%
收藏
 问题点数:0 回复次数:8 
vfp导出到EXCEL出错
大家帮帮忙,我想用下面的代码把一个查询结果导出到EXCEL,但是出错了,错误提示是:找不到EXCEL.APPLICATION类定义。



 select  年级, 题号, 性别,答案,人数  from tj1 group by 年级代号,题号,答案,性别 INTO cursor tj
 select tj
 copy to  h:\vfp\tongji\统计结果.xls type xl5
 oExcel=Createobject("Excel.application")
 oExcel.Workbooks.Open("h:\vfp\tongji\统计结果.xls")
 oExcel.Visible=.T.

我找了好多原因,终于发现了问题的根源,但是我还是解决不了。问题就是现在的系统都打了补丁,把Office的漏洞补上了,用这个代码就打不开EXCEL了。
不知哪位高手知道怎么样把封装版的系统补好的这个补丁弄掉。是封装版的系统,比如雨林木风,深度等封装出来的系统,它们都把这个补丁打上了,想御了
怎么弄呀??
搜索更多相关主题的帖子: EXCEL 
2008-09-27 18:19
ibmlang_002
Rank: 5Rank: 5
来 自:浙江-嘉兴
等 级:贵宾
威 望:18
帖 子:437
专家分:176
注 册:2008-8-30
收藏
得分:0 
看看这个,不知道有没有用
如何确定 Office 应用程序的路径
察看本文应用于的产品
文章编号 : 240794
最后修改 : 2006年9月12日
修订 : 6.2
概要
本文通过示例代码说明了在给定 Microsoft Office 应用程序的 ProgID 的情况下,如何以编程方式确定该应用程序的安装路径。
回到顶端

更多信息
自动化服务器具有一个唯一的 ProgID,通常用于自动运行该服务器。下面的列表提供了 Office 应用程序的 ProgID:

应用程序 ProgID
Microsoft Access Access.Application
Microsoft Excel Excel.Application
Microsoft Outlook Outlook.Application
Microsoft PowerPoint Powerpoint.Application
Microsoft Word Word.Application
Microsoft FrontPage FrontPage.Application

请注意,上表提供的 ProgID 与版本无关。应用程序还具有与版本有关的 ProgID,可以将其与本文中提供的示例代码一起使用。例如,Microsoft Excel 具有与版本无关的 ProgID“Excel.Application”以及与版本有关的 ProgID(例如,“Excel.Application.8”和“Excel.Application.9”)。

在给定进程外服务器的 ProgID 的情况下,可以通过检查注册表来获取其位置。进程外服务器在注册表以下位置拥有项:

HKEY_LOCAL_MACHINE\Software\Classes\PROGID\CLSID

它提供了服务器的唯一 CLSID(或类 ID)。该 CLSID 又在以下位置拥有注册表项:

HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx}\LocalServer32

其中指定了服务器的路径。例如,如果要使用 ProgID“Excel.Application”来确定 Microsoft Excel 的路径,应检查以下注册表项:

HKEY_LOCAL_MACHINE\Software\Classes\Excel.Application\CLSID

同时,您将发现 Excel.Application 的 CLSID 为“{00020841-0000-0000-C000-000000000046}”(具体取决于所安装的 Excel 的版本)。接下来,应使用此 CLSID 来检查以下注册表项,以查找 EXCEL.EXE 的路径:

HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{00020841-0000-0000-C000-000000000046}\LocalServer32

所有这些操作都可以通过 advapi32.dll 中的注册表 API 函数以编程方式来完成。
示例代码
1. 启动一个新的用 Visual Basic 编写的“标准 EXE”项目。默认情况下会创建“Form1”。
2. 向“Form1”中添加一个文本框和一个命令按钮。
3. 将以下代码添加到 Form1 的模块中:Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
   "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
   ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) _
   As Long

Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
   ByVal lpReserved As Long, lpType As Long, _
   ByVal lpData As String, lpcbData As Long) As Long  
               'Note that if you declare the lpData parameter as String,
               'you must pass it ByVal.                     
                                                                                   
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Const REG_SZ As Long = 1
Const KEY_ALL_ACCESS = &H3F
Const HKEY_LOCAL_MACHINE = &H80000002
   
Private Sub Command1_Click()
Dim hKey As Long
Dim RetVal As Long
Dim sProgId As String
Dim sCLSID As String
Dim sPath As String

   sProgId = Text1.Text

   'First, get the clsid from the progid
   'from the registry key:
   'HKEY_LOCAL_MACHINE\Software\Classes\<PROGID>\CLSID
   RetVal = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\Classes\" & _
      sProgId & "\CLSID", 0&, KEY_ALL_ACCESS, hKey)
   If RetVal = 0 Then
      Dim n As Long
      RetVal = RegQueryValueEx(hKey, "", 0&, REG_SZ, "", n)
      sCLSID = Space(n)
      RetVal = RegQueryValueEx(hKey, "", 0&, REG_SZ, sCLSID, n)
      sCLSID = Left(sCLSID, n - 1)  'drop null-terminator
      RegCloseKey hKey
   End If
   
   'Now that we have the CLSID, locate the server path at
   'HKEY_LOCAL_MACHINE\Software\Classes\CLSID\
   '     {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx}\LocalServer32

    RetVal = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
        "Software\Classes\CLSID\" & sCLSID & "\LocalServer32", 0&, _
      KEY_ALL_ACCESS, hKey)
   If RetVal = 0 Then
      RetVal = RegQueryValueEx(hKey, "", 0&, REG_SZ, "", n)
      sPath = Space(n)

      RetVal = RegQueryValueEx(hKey, "", 0&, REG_SZ, sPath, n)
      sPath = Left(sPath, n - 1)
      MsgBox sPath
      RegCloseKey hKey
   End If
      
End Sub
                    
 
4. 按 F5 键运行该程序。
5. 在“文本框”中,键入 Excel.Application,然后单击“命令按钮”。Excel.exe 的路径将出现在一个消息框中。

VFP
2008-09-28 11:57
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
是导出到EXCEL出错还是打开导出的文件出错?

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2008-09-28 14:34
msding27
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2008-8-27
收藏
得分:0 
回复 3# hu9jj 的帖子
楼上这位问得真好,应该是打开出错吧,因为它已经复制成功了,你有什么办法吗??

[[it] 本帖最后由 msding27 于 2008-9-28 16:38 编辑 [/it]]
2008-09-28 16:37
fown
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:58
帖 子:1229
专家分:171
注 册:2005-5-26
收藏
得分:0 
DECLARE INTEGER ShellExecute IN shell32.DLL INTEGER HWND,STRING, STRING lpszFile, STRING, STRING, INTEGER

operate="open"
 ShellExecute(0,operate,"h:\vfp\tongji\统计结果.xls",0,0,1)

运行的时候如果出错,注意一下“”符号,有时候我用五笔的时候,默认为全角的,所以有时候不能运行。

有人说VFP不行了,我想说,你连VFP十分之一的功能都不会用,你怎么知道VFP不行?本人拒绝回答学生的问题我回答问题一般情况下只提供思路不提供代码,请理解
2008-09-28 20:06
fown
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:58
帖 子:1229
专家分:171
注 册:2005-5-26
收藏
得分:0 
以上为打开EXCEL文件的代码,呵呵,我平时不提供代码的,现在这个论坛人气低。把你程序中的
oExcel=Createobject("Excel.application")
oExcel.Workbooks.Open("h:\vfp\tongji\统计结果.xls")
oExcel.Visible=.T.
代码替换成我给你的代码就可以了。如果你做表单的话,可以把
DECLARE INTEGER ShellExecute IN shell32.DLL INTEGER HWND,STRING, STRING lpszFile, STRING, STRING, INTEGER
放在表单的LOAD事件中或者INIT事件中,这样就可以必免每次都要重新声明调用,浪费系统资源。
再加一句,以上代码,可以运行OFFICE程序,如WORD,EXCEL等等。
希望有用的收藏一下。

有人说VFP不行了,我想说,你连VFP十分之一的功能都不会用,你怎么知道VFP不行?本人拒绝回答学生的问题我回答问题一般情况下只提供思路不提供代码,请理解
2008-09-28 20:09
msding27
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2008-8-27
收藏
得分:0 
回复 6# fown 的帖子
太谢谢各位啦~!!!!
2008-09-28 21:37
lovers2006
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-7-2
收藏
得分:0 
看了各位的帖子获益非浅,颇受启发,谢谢了!
2010-07-02 10:37
快速回复:vfp导出到EXCEL出错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033451 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved