Страница 1 из 2

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

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

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

Подскажите, пожалуйста, возможно ли это и каким образом? Спасибо.

Добавлено: 12 сен 2005, 14:34
pashulka

Добавлено: 13 сен 2005, 05:49
Sokl
Предлагается использовать Dsofile.dll. Судя по описанию, работают с ним из VB. Мне необходимо работать из VBA! Как это сделать? Как в VBA использовать и подключать DLL? Вообще такое :shock: возможно? Спасибо.

Добавлено: 13 сен 2005, 08:46
treider
Из справки по VBA по слову Declare
Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type]

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

Для решения поставленой задачи можно открыть объект в невидимомом окне и спокойно считывать, что угодно

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

А что такое "невидимое окно"? И что такое "открыть объект"?

Добавлено: 13 сен 2005, 10:07
pashulka
Судя по тому, что вышеопубликованная ссылка относится к 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

…

Добавлено: 13 сен 2005, 10:15
treider
В невидемом окне это что то вроде

Sub f()
Dim App As Excel.Application
Set App = CreateObject("Excel.Application")
.......
End Sub

Добавлено: 13 сен 2005, 10:39
Sokl
Спасибо. Попробую оба варианта. Больше склоняюсь к DSOFile.dll!

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

З.Ы.: Форум мне нравится - я второй день на нем, а уже полегчало! Спасибо всем!!!

Добавлено: 13 сен 2005, 13:57
pashulka
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

Добавлено: 14 сен 2005, 05:57
Sokl
Всем большое спасибо! У меня все получилось!

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