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

Вниз

Версия MSOffice   Найти похожие ветки 

 
kalishenko   (2004-11-12 16:36) [0]

Как программно определить версию установленного офиса, т.е. 97, 2000 или XP?


 
Shadow-UA   (2004-11-12 19:15) [1]

--->
Попробуй через реестр:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office
Там есть ключ с name"ом в зависимости от версии Office: 9, 10, 11 ;((
А может есть и попроще ??? Хйзн.
---> Shadow


 
GanibalLector ©   (2004-11-13 12:10) [2]

...
WordApp := CreateOleObject("Word.Application");
...
Caption:=WordApp.Version;


 
zz 5 ©   (2004-11-13 12:20) [3]

2GanibalLector А ссылку обнулить ?


 
GanibalLector ©   (2004-11-13 12:22) [4]

2 zz 5
Что за ссылка?


 
kalishenko   (2004-11-15 09:44) [5]

Хорошо, с этим разобрался. Но вот как в зависимости от того или иного установленного офиса выполнять функцию WordApplication1.Documents.Open не знаю. У нее в разных модулях количество параметров и сами параметры разные, т.е. если используется Word97.pas - одно количество, WordXP.pas - совершенно другое. При попытке делать следующее

if WordApplication1.Version = "10.0" then
      WordApplication1.Documents.Open(Filename,          EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam,
        EmptyParam, EmptyParam,
        EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,
        EmptyParam,EmptyParam)
      else if WordApplication1.Version = "8.0" then
        WordApplication1.Documents.Open(Filename,            EmptyParam,EmptyParam,EmptyParam,
          EmptyParam,EmptyParam,EmptyParam,
          EmptyParam,
          EmptyParam,EmptyParam);

естественно компилятор ругается. Как быть?


 
zz 5 ©   (2004-11-15 10:40) [6]

Как вариант, можешь отказаться от классов TWordApplication, и работать с вариантной переменной. Естесственно из uses убираешь
Win97, WinXP.
{ Пример }
const
 WordApplication = "Word.Application";
var
 FWordApp: Variant;  { ????????? Word }
 Result: HRESULT;
 Unknown: IUnknown;
 WGuid: TGUID;
begin
 { ??????????? ? ??????? ????????????? }
 WGuid := StringToGUID(WordApplication);
 Result := GetActiveObject(WGuid,nil,Unknown);

 if Result = MK_E_UNAVAILABLE then
   FWordApp := CreateOleObject(WordApplication)
 else
   FWordApp := GetActiveOleObject(WordApplication);

 FWordApp.Documents.Open(AFileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam); { Должно полдойти и для 97 и для XP }

Ну и так далее...

2GanibalLector WordApp := Unassigned


 
kalishenko   (2004-11-15 11:38) [7]

А как открытый таким способом документ редактировать, ведь, как я понял, для автоматических оле-объектов метод connect не работает?


 
kalishenko   (2004-11-15 11:38) [8]

2 zz 5
А как открытый таким способом документ редактировать, ведь, как я понял, для автоматических оле-объектов метод connect не работает?


 
zz 5 ©   (2004-11-15 12:19) [9]

1) Что за метод Connect ?
2) Редактировать в каком смысле: с помощью команд посылаемых серверу или вручную через Word ?


 
kalishenko   (2004-11-15 12:24) [10]

1) Метод WordDocument.Connect или WordDocument.ConnectTo - коннект к серверу или к уже открытому документу.
2) С помощью команд, посылаемых серверу.


 
zz 5 ©   (2004-11-15 12:43) [11]

Да не нужен метод Connect здесь, вот пример:
const
 WordApplication = "Word.Application";
var
 WordApp, WordDoc: Variant;
 Result: HRESULT;
 Unknown: IUnknown;
 WGuid: TGUID;
begin
 if OpenDialog1.Execute then
 begin
   WGuid := StringToGUID(WordApplication);
   Result := GetActiveObject(WGuid,nil,Unknown);

   if Result = MK_E_UNAVAILABLE then
     WordApp := CreateOleObject(WordApplication)
   else
     WordApp := GetActiveOleObject(WordApplication);

   WordApp.Documents.Open(OpenDialog1.FileName,EmptyParam,EmptyParam,EmptyParam,
                           EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                           EmptyParam,EmptyParam);

   WordDoc := WordApp.ActiveDocument;
   WordDoc.Range.Text := "Hello, World";
   WordApp.Visible := True;
   WordApp := Unassigned;
 end;

WordDoc ссылка на открытый документ, с ней и работаешь


 
kalishenko   (2004-11-15 14:17) [12]

Спасибо.



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

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

Наверх




Память: 0.47 MB
Время: 0.036 c
3-1101802909
Russko
2004-11-30 11:21
2004.12.26
Проверка на "занятость" базы данных.


3-1101295409
VitaWED
2004-11-24 14:23
2004.12.26
Название столбца.


14-1102311556
Чеширский Кот из Гондураса
2004-12-06 08:39
2004.12.26
Позвольте представиться


14-1102051996
MBo
2004-12-03 08:33
2004.12.26
Пятница. Задачки. Вася Пупкин снова в бою ;)


1-1102974763
Kolan
2004-12-14 00:52
2004.12.26
Как измерить скорость алгоритма.Знаю что было но не нашел.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский