Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Word и тип документа


BerkeleyMan ©   (2005-09-21 12:45:00) 

Когда я открываю какой-нибудь документ в MS Word, то через Файл - Свойства вижу его тип.
Порылся в Microsoft Office Word 2003 Visual Basic Reference и не смог найти такое свойство у Document Object.

Где оно прячется?
Спасибо заранее.


k2   (2005-09-27 05:29:00) [1]

не уверена,то што ворд отображает на своей вкладке свойств обязательно  должно быть доступно и пользователям в виде свойства, возможно это комбинация, поисследуйте:
ActiveDocument.SaveFormat
WordApplication.FileConverters


BerkeleyMan   (2005-09-26 12:08:00) [2]

Нет, все-таки опять не то, мисс.

Для вордовских файлов это хорошо, но не DOC-ом единым жив юзер.
Представьте себе MS Works-документ (без расширения), который прекрасно открывается Вордом через офисные конвертеры.
Ворд для него проставляет Тип.

Поэтому здесь хранилища не подойдут, здесь нужна OLE-автоматизация и только она!

Но вот вопрос: в каком свойстве искать этот тип? Должен же он куда-то прописываться...


k2   (2005-09-26 11:10:00) [3]

Переименовала, сделала
Memo1.Lines.Add(GetDocType('d:\examples\doc1'));
без открытия получила "Документ Microsoft Office Word"
чем не устраивает? :)


BerkeleyMan   (2005-09-26 10:48:00) [4]

Нет, этот тип проставляется на основе расширения файла.

А вот, допустим, я переименую вордовский файл в файл без расширения и открою его в Ворде. Тот без труда распознает его, откроет как положено и выведет в поле Тип: Microsoft Word 97-2003 Документ


k2   (2005-09-26 05:44:00) [5]

а вы про этот тип :) если чесно немножко не понимаю зачем он нужен изнутри ворда, снаружи его можно посмотреть так:

function GetDocType(FileName: TFileName): String;
const
 FMTID_SummaryInformation: TGUID = '{F29F85E0-4FF9-1068-AB91-08002B27B3D9}';
var
 Storage: IStorage;
 ole_type: PWideChar;
 cf: Word;
begin
 OleCheck(StgOpenStorage(StringToOleStr(FileName), nil, STGM_DIRECT or STGM_READWRITE or STGM_SHARE_EXCLUSIVE, nil, 0, Storage));
 if Succeeded(ReadFmtUserTypeStg(Storage, cf, ole_type)) then
   Result := ole_type
 else
   Result := '';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Memo1.Lines.Add(GetDocType('d:\examples\doc1.doc'));
end;


если интересно вообще о всех свойствах в качестве примера можно поискать по "dsofile" на майкрософте, и либо использовать готовую библиотеку либо реализовать свое по примеру

ещё один вариант: читать свойство из реестра


BerkeleyMan   (2005-09-23 18:20:00) [6]

Теперь он выводит следующее:

1. Title =  
2. Subject =
3. Author = Kit and Jeff
4. Keywords =
5. Comments =
6. Template = Normal
7. Last author = Kit and Jeff
8. Revision number = 1
9. Application name = Microsoft Office Word
10. Unspecified error
11. Creation date = 7/8/2005 10:08:00 AM
12. Last save time = 7/8/2005 10:11:00 AM
13. Total editing time = 3
14. Number of pages = 2
15. Number of words = 63
16. Number of characters = 240
17. Security = 0
18. Category =
19. Format =
20. Manager =
21. Company =
22. Number of bytes = 53760
23. Number of lines = 19
24. Number of paragraphs = 5
25. Unspecified error
26. Unspecified error
27. Unspecified error
28. Unspecified error
29. Hyperlink base =
30. Number of characters (with spaces) = 301

Но где же тип документа?


k2   (2005-09-23 04:56:00) [7]

>BerkeleyMan   (23.09.05 00:50) [9]
неправда ваша :) только свойств, которым не присвоено, либо для них не сформировано значение


uses ..., Word9_TLB, ComObj;
...
procedure TForm1.Button1Click(Sender: TObject);
var
 WApp: WordApplication;
 built_props, item: OleVariant;// IDispatch;
 i: WdBuiltInProperty;           // или integer
 str: string;
begin
 WApp := GetActiveOleObject('Word.Application')as WordApplication;
 built_props := WApp.ActiveDocument.BuiltInDocumentProperties;
 for i := 1 to built_props.count do begin
   item := built_props.item[i];
   str := IntToStr(i) + '. ' + VarToStr(item.name)+' = ';
   try
     str := str + VarToStr(item.value);
   except
     //todo: гасим исключение втихушку, если нужно обрабатывать
     //отсутствие значения свойства, то добавить сюда
   end;
   Memo1.Lines.Add(str);
 end;
end;


BerkeleyMan   (2005-09-23 00:50:00) [8]

Он выдает "Member not found" на все тридцать айтемов (BuiltInDocumentProperties.Count = 30)


YurikGL   (2005-09-22 23:00:00) [9]


> BerkeleyMan   (22.09.05 22:49) [7]

Когда выдается сообщение Member not found. J чему равно?


BerkeleyMan   (2005-09-22 22:49:00) [10]

при этом:
DocItem := WD.ActiveDocument.BuiltInDocumentProperties.Item(J);


YurikGL   (2005-09-22 22:37:00) [11]


> Выдается сообщение Member not found.

при каком j ?


BerkeleyMan   (2005-09-22 21:28:00) [12]

Спасибо.

WD.ActiveDocument.BuiltInDocumentProperties.Count вернул мне 30.

Когда я прохожусь циклом:
for J := 1 to WD.ActiveDocument.BuiltInDocumentProperties.Count do
 DocItem := WD.ActiveDocument.BuiltInDocumentProperties.Item(J);

Выдается сообщение Member not found.

Что я делаю не так?


k2   (2005-09-22 13:05:00) [13]

Microsoft Office Word 2003 Visual Basic Reference ->Objects->Document Object->Properties->BuiltInDocumentProperties Property или CustomDocumentProperties Property в зависимости от того какая именно вкладка Свойств интересует


BerkeleyMan   (2005-09-22 12:06:00) [14]

Простите, ничего не понял. В каком конкретном свойстве?


k2   (2005-09-22 08:53:00) [15]

точнее DocumentProperties (BuiltIn и Custom) ну да там уже по справке


k2   (2005-09-22 08:48:00) [16]

ActiveDocument.CustomDocumentProperties


Наверх

Титульная страница Поиск, карта сайта Написать письмо