Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.07;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2007.01.07;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.039 c
15-1166411867
Slider007
2006-12-18 06:17
2007.01.07
С днем рождения ! 16 декабря


15-1166539412
ocean
2006-12-19 17:43
2007.01.07
Отменить установку IE7


15-1166344583
Gydvin
2006-12-17 11:36
2007.01.07
Вопрос по JavaScript


2-1166539857
niko
2006-12-19 17:50
2007.01.07
Assembler


1-1163766674
Mishenka
2006-11-17 15:31
2007.01.07
Как в Word вставить картинку не поверх текста?