Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / определить версию офиса из фокса. / 15 сообщений из 15, страница 1 из 1
03.02.2015, 23:57
    #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
04.02.2015, 06:06
    #38870919
определить версию офиса из фокса.
gotko,
попробуйте делать хардкорно (я на Ворде показал, но у Экселя то же самое):

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

и уже потом, какая версия подойдет - ту ветку и вести...
...
Рейтинг: 0 / 0
04.02.2015, 07:22
    #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
04.02.2015, 10:07
    #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
04.02.2015, 10:43
    #38871116
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
определить версию офиса из фокса.
Дед Евгенийttt = AGETFILEVERSION(ArrayVersion,"c:\Program Files\Microsoft Office\Office 14 \"+"WINWORD.EXE")кагбэ если мы знаем эту циферку, то версия офиса (2000/2003/2007) нам уже известна, нет? :)
...
Рейтинг: 0 / 0
04.02.2015, 11:36
    #38871163
Дед Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
определить версию офиса из фокса.
Вот как раз она из заголовка файла Winword.exe и вытаскивает инфу по версии
...
Рейтинг: 0 / 0
04.02.2015, 11:42
    #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
04.02.2015, 12:29
    #38871237
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
определить версию офиса из фокса.
Дед ЕвгенийВот как раз она из заголовка файла Winword.exe и вытаскивает инфу по версииНо для этого мы должны знать, где этот экзешник находится. А если мы знаем, где он находится, то мы уже знаем версию - просто по названию папки, в которой он лежит :)
А вообще вот самое нормальное решение
sg12lcVersion = ALLTRIM(GETWORDNUM(goExcel.VERSION,1,'.'))
DO CASE
...Без всяких танцев с определением местоположения исполняемого файла.
...
Рейтинг: 0 / 0
04.02.2015, 12:57
    #38871286
определить версию офиса из фокса.
А если установлен Офис Стартер? Или несколько версий Офиса?
...
Рейтинг: 0 / 0
04.02.2015, 20:42
    #38871755
sg12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
определить версию офиса из фокса.
FfffffffffffffffffffffffА если установлен Офис Стартер? Или несколько версий Офиса?

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

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


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

По правилам хорошего тона не лишне при запуске программы проверять наличие Word и Excel:
TRY
goExcel=CREATEOBJECT('Excel.Application')
RELEASE goExcel
...
Визуализируйте это через Combobox, куда и внесите ваши Офисы:
.AddItem('Excel.Application.<версия>')
В Стартер, если что, вообще нет VBA.
...
Рейтинг: 0 / 0
05.02.2015, 16:55
    #38872597
sg12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
определить версию офиса из фокса.
Ffffffffffffffffff, со Стартером вам сюда: http://www.sql.ru/forum/ms-office
...
Рейтинг: 0 / 0
03.03.2015, 13:54
    #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
01.04.2015, 13:00
    #38923740
makar12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
определить версию офиса из фокса.
2 tanglir,
кагбэ если мы знаем эту циферку ...
* Версия Офиса

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


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