怎样正确地引用OFFICE?
在使用OFFICE组件的时候,如果客户机和我的OFFICE版本不一样,在编码的时候我该怎么引用?如果不能确定客户机的OFFICE版本(可能每个客户机的版本都不一样)我该用什么版本?有没有办法使应用程序发布一次就集成各版本的OFFICE组件,而不必针对每个版本进行重新打包发布!
问题点数:20、回复次数:6Top
1 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-04 14:30:28 得分 2
打包时,把相关的office文件打进去Top
2 楼rainstormmaster(暴风雨 v2.0)回复于 2006-03-04 17:25:39 得分 2
绑定的时候用createobjectTop
3 楼ynhgk1()回复于 2006-03-06 10:15:20 得分 2
引用时,引用OFFICE最低的版本(office2000应该可以了),office高版本都兼容低版本的。Top
4 楼cdxiaoke(子星)回复于 2006-03-08 06:43:17 得分 0
如果本机装的是Office XP而不是2000怎么办?Top
5 楼hot1kang1(网站制作,系统开发,记得-http://3q2008.Com)回复于 2006-03-08 10:35:46 得分 14
OFFICE组件 是高版本像低版本兼容的, 如果2000 版够用的话,可以在office 2000 版本的环境下开发或是 office 97 , 在程序运行时,做个office版本检测..代码如下
Attribute VB_Name = "modOfficePath"
Option Explicit
Const REG_EXPAND_SZ = 2
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_PERFORMANCE_DATA = &H80000004
Const ERROR_SUCCESS = 0&
Const RegLocation = "software\UnpreXisten\Online Code Browser\"
Const RegKey = HKEY_LOCAL_MACHINE
Dim AppVer As String * 8
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal Hkey As Long) As Long
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal Hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal Hkey As Long, ByVal lpSubKey As String) As Long
Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal Hkey As Long, ByVal lpValueName As String) As Long
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal Hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal Hkey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal Hkey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Const REG_SZ = 1
Const REG_DWORD = 4
Public Enum OfficeVer
Office_97
Office_2000
Office_xp
Office_2003
End Enum
'<CSCM>
'--------------------------------------------------------------------------------
' 工 程 名: 工程1
' 函 数 名: GetString
' 变 量 : OfKind (OfficeVer)
' 输 入:无
' 输 出:OFFICE 的路径
'我的机器没有OFFICE xp 根据97 200 2003的关系
'可以看出键值为"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\10.0\Common\InstallRoot"
' 日 期 : 2005-7-5
' 作 者 : 许仙
'--------------------------------------------------------------------------------
'</CSCM>
Public Function GetOfficePath(OfKind As OfficeVer) As String
Dim lValueType
Dim keyhand As Long, r
Dim datatype As Long
Dim lResult As Long
Dim strBuf As String
Dim lDataBufSize As Long
Dim intZeroPos As Integer, StrKeyName$
Select Case OfKind
Case 0
r = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Office\8.0\Common\InstallRoot", keyhand)
StrKeyName = "OfficeBin"
Case 1
r = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Office\9.0\Common\InstallRoot", keyhand)
StrKeyName = "Path"
Case 2
r = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Office\10.0\Common\InstallRoot", keyhand)
StrKeyName = "Path"
Case 3
r = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Office\11.0\Common\InstallRoot", keyhand)
StrKeyName = "Path"
End Select
lResult = RegQueryValueEx(keyhand, StrKeyName, 0&, lValueType, ByVal 0&, lDataBufSize)
If lValueType = REG_SZ Then
strBuf = String(lDataBufSize, " ")
lResult = RegQueryValueEx(keyhand, StrKeyName, 0&, 0&, ByVal strBuf, lDataBufSize)
If lResult = ERROR_SUCCESS Then
intZeroPos = InStr(strBuf, Chr$(0))
If intZeroPos > 0 Then
GetOfficePath = Left$(strBuf, intZeroPos - 1)
Else
GetOfficePath = strBuf
End If
End If
End If
End FunctionTop
6 楼cdxiaoke(子星)回复于 2006-03-12 00:48:25 得分 0
谢谢Top




