Excel: Чтение свойств документов (атрибутов)?

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Sokl
Сообщения: 451
Зарегистрирован: 12 сен 2005, 08:52
Откуда: ОМ

Поставлена задача, предусматирвающая чтение/запись свойств документов (документы: MSOffice (doc, xls, ppt, vsd...); свойства, например, "Тема", "Автор", "Руководитель", "Учреждение" и пр., а также свойства, задаваемые пользователем).

Чтение необходимо выполнить из VBA Excel без открытия самих документов.

Подскажите, пожалуйста, возможно ли это и каким образом? Спасибо.
Sokl
Сообщения: 451
Зарегистрирован: 12 сен 2005, 08:52
Откуда: ОМ

Предлагается использовать Dsofile.dll. Судя по описанию, работают с ним из VB. Мне необходимо работать из VBA! Как это сделать? Как в VBA использовать и подключать DLL? Вообще такое :shock: возможно? Спасибо.
treider
Сообщения: 57
Зарегистрирован: 01 сен 2005, 13:29
Откуда: Алматы
Контактная информация:

Из справки по VBA по слову Declare
Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type]

Сам пробовал, функция вызывается, один параметр принимает, но что - нибудь посложнее например ссылку передать не удалось. (в VBS не работает)

Для решения поставленой задачи можно открыть объект в невидимомом окне и спокойно считывать, что угодно
Sokl
Сообщения: 451
Зарегистрирован: 12 сен 2005, 08:52
Откуда: ОМ

treider! Про "Declare ... Lib ..." я читал. В описании к dll говорят про реализованный в ней объект, его свойства и методы, а declare, как я понял, позволяет обращаться к процедурам и функциям dll-ки, но не к объектам!...

А что такое "невидимое окно"? И что такое "открыть объект"?
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Судя по тому, что вышеопубликованная ссылка относится к VBA - это возможно :

1. В меню Сервис выбираете пункт Макрос, а затем команду Редактор Visual Basic [ALT + F11]
2. В меню Сервис выбираете команду Ссылки и в появившемся стандартном диалоговом окне нажимаете кнопку Обзор. Находите dsofile.dll, и нажимаете кнопку Открыть, затем OK.
3.

Код: Выделить всё

Dim iDSOFile As New DSOFile.OleDocumentProperties

iDSOFile.Open "C:\Archiv\Trash.xls"

With iDSOFile.SummaryProperties
     iAuthor = .Author
     iCompany = .Company
     iTitle = .Title
End With

…
treider
Сообщения: 57
Зарегистрирован: 01 сен 2005, 13:29
Откуда: Алматы
Контактная информация:

В невидемом окне это что то вроде

Sub f()
Dim App As Excel.Application
Set App = CreateObject("Excel.Application")
.......
End Sub
Sokl
Сообщения: 451
Зарегистрирован: 12 сен 2005, 08:52
Откуда: ОМ

Спасибо. Попробую оба варианта. Больше склоняюсь к DSOFile.dll!

Кстати, пожалуйста, если есть "DsoFileSetup_KB224351_x86.exe" с сайта Microsoft, дайте мне: я не нахожу общего языка со своим админом - закрыл доступ!!!

З.Ы.: Форум мне нравится - я второй день на нем, а уже полегчало! Спасибо всем!!!
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

1. Вы можете скачать dsofile.dll если станете участником форума на Исходниках (см. ссылку)
2. Что касается "невидимого" открытия файла, то этого же эффекта можно достичь, если просто "отключить" обновление экрана.

Код: Выделить всё

Application.ScreenUpdating = False

With Workbooks.Open(FileName:="C:\Archiv\Trash.xls")
     iAuthor = .BuiltinDocumentProperties(3)
     .Close saveChanges:=False
End With

Application.ScreenUpdating = True
Sokl
Сообщения: 451
Зарегистрирован: 12 сен 2005, 08:52
Откуда: ОМ

Всем большое спасибо! У меня все получилось!

З.Ы.: Тоже хочу быть умным... :roll:
Ответить