Текущий архив: 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.48 MB
Время: 0.01 c