Reputation: 63
In my program I have to load a excel-file. This file can have the following extensions: [.xls][.xlsx][.xlsm][.xlsb].
Excel07+ can handle all of these by nature, but to work with [.xlsx][.xlsm][.xlsb] in Excel2003 you have to install the http://www.microsoft.com/en-us/download/details.aspx?id=3
Here is my code to determine, which excelversion is installed. Problem: I don´t know how to determine an installation of the compatibility pack (marked by +++)
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;
Perhaps someone knows a solution.
Upvotes: 3
Views: 902
Reputation: 36
I have found the following answer at http://www.tech-archive.net/Archive/Word/microsoft.public.word.vba.general/2008-10/msg00682.html
This is a VBA function, so you may need to translate it to your programming language of choice. (In more modern languages use Try/Catch clause instead of "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
Upvotes: 2