3

在我的程序中我必须加载一个excel文件。该文件可以具有以下扩展名:[.xls] [。xlsx] [。xlsm] [。xlsb]。安装Office2003兼容包?

Excel07 +可以通过自然处理所有这些,但[的.xlsx]工作[XLSM] [XLSB在Excel2003中,你必须安装http://www.microsoft.com/en-us/download/details.aspx?id=3

这里是我的代码,以确定,这excelversion已安装。问题:我不知道如何确定兼容包的安装(标记为+++)

if (ExtractFileExt(sFileNameVorlage) = '.xlsx') or 
    (ExtractFileExt(sFileNameVorlage) = '.xlsm') or 
    (ExtractFileExt(sFileNameVorlage) = '.xlsb') then 
    begin 

    //determine version of excel (lower or equal 2003) 
    if StrToInt(Copy(oVersionscheck.version,1,2)) <= 11 then 
    begin 

     // equal 2003 
     if StrToInt(Copy(oVersionscheck.version,1,2)) = 11 then 
     if not +++compatibility pack installed?+++ then 
     begin  
      ShowMessage('Warning: Excel can´t open this file.'); 
      oVersionscheck.Quit; 
      oVersionscheck := unassigned; 
      Exit; 
     end; 
     end; 
     oVersionscheck.Quit; 
end; 

也许有人知道解决方案。

回答

2

我发现在http://www.tech-archive.net/Archive/Word/microsoft.public.word.vba.general/2008-10/msg00682.html

这是一个VBA函数以下的答案,所以你可能需要将其转换为您选择的编程语言。 (在更现代的语言中使用Try/Catch子句而不是“On Error Resume Next”)

Function Office2007CompatibilityInstalled() 
'Checks whether in Office 2003 the compatibility pack for Office 2007/2010 is installed 
    Dim WSHShell, RegKey, rKeyWord, Result 
    Set WSHShell = CreateObject("WScript.Shell") 
    RegKey = "HKEY_CLASSES_ROOT\Installer\Products\00002109020090400000000000F01FEC\" 

    On Error Resume Next 'This is in an anticipation of what may happen in the next line 
    'The next line will generate an error if the registry key does not exist. 
    'This error will be ignored and execution will continue with the line following 
    'it (because of "On Error Resume Next" statement). In this case the value of 
    'rKeyWord will remain uninitialised. 
    rKeyWord = WSHShell.RegRead(RegKey & "ProductName") 
    'In the line below we compare the value of rKeyWord to a fixed string which we 
    'know to denote that Office2007 Compatibility Pack has been installed. 
    'If the registry key did not exist then the value of rKeyWord will be uninitialised 
    'and will be automatically converted to an empty string ("") for the purposes 
    'of this comparison. 
    If rKeyWord = "Compatibility Pack for the 2007 Office system" Then 
     Office2007CompatibilityInstalled = True 
    End If 
End Function