powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / определить версию офиса из фокса.
15 сообщений из 15, страница 1 из 1
определить версию офиса из фокса.
    #38870878
gotko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проблем. прога мной написана на vfp8.0 в 2001г.
Сейчас часть компов-клиентов под 64х(win7+office2013), меньшая часть под 32х(winXP+office2000)(не предлагать сменить компы)
на некоторых установлен 2013 офис(на новых), а на некоторых 2000 офис(старый)
во многих командах управления Excel2013 из VFP8.0 не прокатывают команды(OLE), которые работали в office 2000.
в частности .activeworkbook.save
Придумал, как обойти ситуацию с помощью activeworkbook.saveas(...), но для этого надо определять версию установленного офиса.
Подскажите, плиз, как определить, какая версия офиса используется на текущей машине(консоли (termsrv тоже есть))?

P.S. А может я дурака валяю и заморачиваюсь, и есть API функция, которая вернет мне ID офиса?(да/нет)
...
Рейтинг: 0 / 0
определить версию офиса из фокса.
    #38870919
gotko,
попробуйте делать хардкорно (я на Ворде показал, но у Экселя то же самое):

WordApp = CREATEOBJECT("Word.Application.<версия>")

и уже потом, какая версия подойдет - ту ветку и вести...
...
Рейтинг: 0 / 0
определить версию офиса из фокса.
    #38870949
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не замечал особых проблем с экселем. Есть 2003x32 и 2007x64 в оба выводится нормально, есть небольшие проблемы с диаграммами.
Пример кода создания файла экселя
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
loEx = newobject("Excel.Sheet")
loEx.parent.DisplayAlerts = .f.
? 'Версия Excel', loEx.parent.version()

* Вставка в эксель через буфер обмена
_cliptext = 'Пример' + chr(9) + 'вывода' + chr(13) + 'в' + chr(10) + 'эксель'
loEx.ActiveSheet.PasteSpecial(1)
* Форматирование
WITH loEx.ActiveSheet
	* имя листа
	.Name = 'Отчет'
	* разлиновка
	For i = 7 To 12
		.Range(.Cells(1, 1),.Cells(3, 2)).BorderS(i).LineStyle = 1
	Endfor
endwith

* сохранение файла
lcFile = fullpath('my_file.xls')
WITH loEx.parent
	TRY
		if file(lcFile)
			delete File (lcFile)
		endif
		.ActiveWorkbook.SaveAs(lcFile, -4143)
		.ActiveWorkbook.Close()
		llOk = .T.
	CATCH
		? '!!! Не удалось сохранить в файл ' + lcFile
		.Visible = .T.
		llOk = .F.
	ENDTRY
ENDWITH 

return llOk
...
Рейтинг: 0 / 0
определить версию офиса из фокса.
    #38871082
Дед Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно получить версию любой программы используя системную функцию:
ttt = AGETFILEVERSION(ArrayVersion,"c:\Program Files\Microsoft Office\Office14\"+"WINWORD.EXE")
ArrayVersion[10] = "Microsoft Office 2010"
ArrayVersion[11] = "14.0.7134.5000"
и остальные параметры из массива.
...
Рейтинг: 0 / 0
определить версию офиса из фокса.
    #38871116
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дед Евгенийttt = AGETFILEVERSION(ArrayVersion,"c:\Program Files\Microsoft Office\Office 14 \"+"WINWORD.EXE")кагбэ если мы знаем эту циферку, то версия офиса (2000/2003/2007) нам уже известна, нет? :)
...
Рейтинг: 0 / 0
определить версию офиса из фокса.
    #38871163
Дед Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как раз она из заголовка файла Winword.exe и вытаскивает инфу по версии
...
Рейтинг: 0 / 0
определить версию офиса из фокса.
    #38871171
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gotko

.ActiveWorkbook.Save(...) - в этой строке две команды.

Попробуйте избавиться от .ActiveWorkbook., определяя объектную переменную loWorkbook при открытии:
loWorkBook = .Open(...)
или: loWorkBook = .Add(...)
или даже так: loWorkbook = .ActiveWorkbook

Тогда ваши команды будут выглядеть так:
goExcel.DisplayAlerts = .F.
loWorkbook.SAVEAS(...) && SAVE()
goExcel.DisplayAlerts = .T.

Попробуйте также общие команды вынести в отдельные обертки, тогда примерно:
lOCAL loWorkbook
loWorkbook = .DoWorkbookOpen(...)
*** ваши операции
.DoWorkbookSave(loWorkbook,...)
.DoWorkbookClose(loWorkbook,...)

Тогда вы сможете выделить и скорректировать нюансы, если они имеются:
lcVersion = ALLTRIM(GETWORDNUM(goExcel.VERSION,1,'.'))
DO CASE
CASE lcVersion = '9'
* 2000
CASE lcVersion = '10'
* XP
CASE lcVersion = '11'
* 2003
CASE lcVersion = '12'
* 2007
CASE lcVersion = '14'
* 2010
ENDCASE
...
Рейтинг: 0 / 0
определить версию офиса из фокса.
    #38871237
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дед ЕвгенийВот как раз она из заголовка файла Winword.exe и вытаскивает инфу по версииНо для этого мы должны знать, где этот экзешник находится. А если мы знаем, где он находится, то мы уже знаем версию - просто по названию папки, в которой он лежит :)
А вообще вот самое нормальное решение
sg12lcVersion = ALLTRIM(GETWORDNUM(goExcel.VERSION,1,'.'))
DO CASE
...Без всяких танцев с определением местоположения исполняемого файла.
...
Рейтинг: 0 / 0
определить версию офиса из фокса.
    #38871286
А если установлен Офис Стартер? Или несколько версий Офиса?
...
Рейтинг: 0 / 0
определить версию офиса из фокса.
    #38871755
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FfffffffffffffffffffffffА если установлен Офис Стартер? Или несколько версий Офиса?

По правилам хорошего тона не лишне при запуске программы проверять наличие Word и Excel:
TRY
goExcel=CREATEOBJECT('Excel.Application')
RELEASE goExcel
...
Визуализируйте это через Combobox, куда и внесите ваши Офисы:
.AddItem('Excel.Application.<версия>')
...
Рейтинг: 0 / 0
определить версию офиса из фокса.
    #38872302
gotko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sg12,

lcVersion = ALLTRIM(GETWORDNUM(goExcel.VERSION,1,'.'))
case ...


спасибо - самый на мой взгляд простой вариант.
и легко ложится на мой код.
еще раз спасибо...
...
Рейтинг: 0 / 0
определить версию офиса из фокса.
    #38872487
Ffffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sg12FfffffffffffffffffffffffА если установлен Офис Стартер? Или несколько версий Офиса?

По правилам хорошего тона не лишне при запуске программы проверять наличие Word и Excel:
TRY
goExcel=CREATEOBJECT('Excel.Application')
RELEASE goExcel
...
Визуализируйте это через Combobox, куда и внесите ваши Офисы:
.AddItem('Excel.Application.<версия>')
В Стартер, если что, вообще нет VBA.
...
Рейтинг: 0 / 0
определить версию офиса из фокса.
    #38872597
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ffffffffffffffffff, со Стартером вам сюда: http://www.sql.ru/forum/ms-office
...
Рейтинг: 0 / 0
определить версию офиса из фокса.
    #38893515
rv2plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TRY
loWord = CREATEOBJECT('Word.Application')
CATCH
ENDTRY
IF VARTYPE(loWord) = 'O'
?GetWordVersionDescription(VAL(loWord.Build))
loWord.Quit()
ELSE
?'Microsoft Word not installed'
ENDIF

***

FUNCTION GetWordVersionDescription
LPARAMETERS tnVersion AS Integer
ASSERT VARTYPE(tnVersion) = 'N'
LOCAL lcVersion AS String
DO CASE
CASE tnVersion = 0
lcVersion = 'Не определена'
CASE tnVersion = 1
lcVersion = 'MS Word 1.0' && for Windows 1989 год'
CASE tnVersion = 2
lcVersion = 'MS Word 2.0' && for Windows 1991 год'
CASE BETWEEN(tnVersion,3,5)
lcVersion = 'Неизвестна'
CASE tnVersion = 6
lcVersion = 'MS Word 6.0' && 1993 год
CASE tnVersion = 7
lcVersion = 'MS Word 95'
CASE tnVersion = 8
lcVersion = 'MS Word 97'
CASE tnVersion = 9
lcVersion = 'MS Word 2000'
CASE tnVersion = 10
lcVersion = 'MS Word 2002/XP'
CASE tnVersion = 11
lcVersion = 'MS Word 2003'
CASE tnVersion = 12
lcVersion = 'MS Word 2007'
CASE tnVersion = 13
lcVersion = 'Не существует' && 13 для MS несчастливое число
CASE tnVersion = 14
lcVersion = 'MS Word 2010'
CASE tnVersion = 15
lcVersion = 'MS Word 2012'
CASE tnVersion > 15
lcVersion = 'Старше 2012'
ENDCASE
RETURN lcVersion

*!* 1989, ноябрь Word для Windows
*!* 1991 Word 2 для Windows
*!* 1993 Word 6 для Windows (номер <6> был введён для продолжения линейки номеров DOS-версий, единой нумерации с Mac-версиями и с WordPerfect, лидером рынка среди текстовых процессоров на тот момент)
*!* 1995 Word 95 (Word 7)
*!* 1997 Word 97 (Word 8)
*!* 1999 Word 2000 (Word 9)
*!* 2001 Word 2002 (Word 10)
*!* 2001 Word XP, см. выше
*!* 11 Word 2003 (также известный как Word 11, однако официально именуемый Microsoft Office Word 2003)
*!* 12 Word 2007 (революционная смена интерфейса, поддержка формата OOXML - *.docx)
*!* 14 Word 2010
*!* 15 Word 2012 ?
...
Рейтинг: 0 / 0
определить версию офиса из фокса.
    #38923740
makar12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 tanglir,
кагбэ если мы знаем эту циферку ...
* Версия Офиса

m.XlsVersion= AGETFILEVERSION(aTmp,ADDBS(loExcel.APPLICATION.Path)+'Excel.exe')
m.XlsVersion=aTmp[10]
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / определить версию офиса из фокса.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]