Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Corba";
Текущий архив: 2007.01.07;
Скачать: [xml.tar.bz2];

Вниз

Word и тип документа   Найти похожие ветки 

 
BerkeleyMan   (2005-09-21 12:45) [0]

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

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


 
k2 ©   (2005-09-22 08:48) [1]

ActiveDocument.CustomDocumentProperties


 
k2 ©   (2005-09-22 08:53) [2]

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


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

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


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

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


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

Спасибо.

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

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

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

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


 
YurikGL ©   (2005-09-22 22:37) [6]


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

при каком j ?


 
BerkeleyMan   (2005-09-22 22:49) [7]

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


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


> BerkeleyMan   (22.09.05 22:49) [7]

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


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

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


 
k2 ©   (2005-09-23 04:56) [10]

>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 18:20) [11]

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

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-26 05:44) [12]

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

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-26 10:48) [13]

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

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


 
k2 ©   (2005-09-26 11:10) [14]

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


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

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

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

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

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


 
k2 ©   (2005-09-27 05:29) [16]

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



Страницы: 1 вся ветка

Форум: "Corba";
Текущий архив: 2007.01.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
2-1166273130
Ivolg
2006-12-16 15:45
2007.01.07
HEX значения


2-1166210143
jonson35
2006-12-15 22:15
2007.01.07
определить координаты мыши относительно Image


15-1165854786
iZEN
2006-12-11 19:33
2007.01.07
Сегодня вышла Java 6 (Mustang)


9-1141129253
grisme
2006-02-28 15:20
2007.01.07
Модель дерева


15-1166292950
XProger
2006-12-16 21:15
2007.01.07
Delphi и UML





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский