Используйте platform.release()
Пример:
import platform
print(platform.release())
, если ОС является настольным ПК:
7
Если ОС является сервером: [ 117]
2008ServerR2
Что относительно этого:
Public Sub ListAddins()
Dim ai As AddIn
For Each ai In Application.AddIns
If Not ai.Installed Then
Debug.Print ai.Application, ai.Parent, ai.Name, ai.FullName
End If
Next
End Sub
Какое-либо использование?
Я все еще в поисках нормального решения для этой проблемы, но в настоящее время кажется, что чтение текстов окна всех окон рабочей книги дает набор всех открытых рабочих книг, дополнения или нет:
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Function GetAllOpenWorkbooks() As Collection
'Retrieves a collection of all open workbooks and add-ins.
Const EXCEL_APPLICATION_WINDOW As String = "XLDESK"
Const EXCEL_WORKBOOK_WINDOW As String = "EXCEL7"
Dim hWnd As Long
Dim hWndExcel As Long
Dim contentLength As Long
Dim buffer As String
Dim bookName As String
Dim books As Collection
Set books = New Collection
'Find the main Excel window
hWndExcel = FindWindowEx(Application.hWnd, 0&, EXCEL_APPLICATION_WINDOW, vbNullString)
Do
'Find next window
hWnd = FindWindowEx(hWndExcel, hWnd, vbNullString, vbNullString)
If hWnd Then
'Create a string buffer for 100 chars
buffer = String$(100, Chr$(0))
'Get the window class name
contentLength = GetClassName(hWnd, buffer, 100)
'If the window found is a workbook window
If Left$(buffer, contentLength) = EXCEL_WORKBOOK_WINDOW Then
'Recreate the buffer
buffer = String$(100, Chr$(0))
'Get the window text
contentLength = GetWindowText(hWnd, buffer, 100)
'If the window text was returned, get the workbook and add it to the collection
If contentLength Then
bookName = Left$(buffer, contentLength)
books.Add Excel.Application.Workbooks(bookName), bookName
End If
End If
End If
Loop While hWnd
'Return the collection
Set GetAllOpenWorkbooks = books
End Function
Используйте =DOCUMENTS, макро-функцию Excel4.
Dim Docs As Variant
Docs = Application.Evaluate("documents(2)")
Вот документация для него (доступна здесь):
ДОКУМЕНТЫ
Возвраты, как горизонтальный массив в текстовой форме, названиях указанных открытых рабочих книг в алфавитном порядке. Используйте ДОКУМЕНТЫ для получения названий открытых рабочих книг для использования в других функциях, которые управляют открытыми рабочими книгами.
Синтаксис
ДОКУМЕНТЫ (type_num, match_text)
Type_num является числом, указывающим, включать ли дополнительные рабочие книги в массив рабочих книг, согласно следующей таблице.
Type_num Returns
1 or omitted Names of all open workbooks except add-in workbooks
2 Names of add-in workbooks only
3 Names of all open workbooks
Match_text указывает рабочие книги, имена которых, которые Вы хотите, возвратились и могут включать подстановочные символы. Если match_text опущен, ДОКУМЕНТЫ возвращает названия всех открытых рабочих книг.
Выполняет итерации через реестр возможности? Я знаю, что это не дает Вам снимок того, что Ваш экземпляр Excel использует, но что новый экземпляр использовал бы - но в зависимости от того, для чего Вы нуждаетесь в нем, это могло бы быть достаточно хорошо.
Соответствующие ключи:
'Active add-ins are in values called OPEN*
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Options
'Inactive add-ins are in values of their full path
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Add-in Manager