|
определить версию офиса из фокса.
|
|||
---|---|---|---|
#18+
проблем. прога мной написана на 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 офиса?(да/нет) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2015, 23:57 |
|
определить версию офиса из фокса.
|
|||
---|---|---|---|
#18+
gotko, попробуйте делать хардкорно (я на Ворде показал, но у Экселя то же самое): WordApp = CREATEOBJECT("Word.Application.<версия>") и уже потом, какая версия подойдет - ту ветку и вести... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2015, 06:06 |
|
определить версию офиса из фокса.
|
|||
---|---|---|---|
#18+
Не замечал особых проблем с экселем. Есть 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2015, 07:22 |
|
определить версию офиса из фокса.
|
|||
---|---|---|---|
#18+
Можно получить версию любой программы используя системную функцию: ttt = AGETFILEVERSION(ArrayVersion,"c:\Program Files\Microsoft Office\Office14\"+"WINWORD.EXE") ArrayVersion[10] = "Microsoft Office 2010" ArrayVersion[11] = "14.0.7134.5000" и остальные параметры из массива. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2015, 10:07 |
|
определить версию офиса из фокса.
|
|||
---|---|---|---|
#18+
Дед Евгенийttt = AGETFILEVERSION(ArrayVersion,"c:\Program Files\Microsoft Office\Office 14 \"+"WINWORD.EXE")кагбэ если мы знаем эту циферку, то версия офиса (2000/2003/2007) нам уже известна, нет? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2015, 10:43 |
|
определить версию офиса из фокса.
|
|||
---|---|---|---|
#18+
Вот как раз она из заголовка файла Winword.exe и вытаскивает инфу по версии ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2015, 11:36 |
|
определить версию офиса из фокса.
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2015, 11:42 |
|
определить версию офиса из фокса.
|
|||
---|---|---|---|
#18+
Дед ЕвгенийВот как раз она из заголовка файла Winword.exe и вытаскивает инфу по версииНо для этого мы должны знать, где этот экзешник находится. А если мы знаем, где он находится, то мы уже знаем версию - просто по названию папки, в которой он лежит :) А вообще вот самое нормальное решение sg12lcVersion = ALLTRIM(GETWORDNUM(goExcel.VERSION,1,'.')) DO CASE ...Без всяких танцев с определением местоположения исполняемого файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2015, 12:29 |
|
определить версию офиса из фокса.
|
|||
---|---|---|---|
#18+
А если установлен Офис Стартер? Или несколько версий Офиса? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2015, 12:57 |
|
определить версию офиса из фокса.
|
|||
---|---|---|---|
#18+
FfffffffffffffffffffffffА если установлен Офис Стартер? Или несколько версий Офиса? По правилам хорошего тона не лишне при запуске программы проверять наличие Word и Excel: TRY goExcel=CREATEOBJECT('Excel.Application') RELEASE goExcel ... Визуализируйте это через Combobox, куда и внесите ваши Офисы: .AddItem('Excel.Application.<версия>') ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2015, 20:42 |
|
определить версию офиса из фокса.
|
|||
---|---|---|---|
#18+
sg12, lcVersion = ALLTRIM(GETWORDNUM(goExcel.VERSION,1,'.')) case ... спасибо - самый на мой взгляд простой вариант. и легко ложится на мой код. еще раз спасибо... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2015, 14:11 |
|
определить версию офиса из фокса.
|
|||
---|---|---|---|
#18+
sg12FfffffffffffffffffffffffА если установлен Офис Стартер? Или несколько версий Офиса? По правилам хорошего тона не лишне при запуске программы проверять наличие Word и Excel: TRY goExcel=CREATEOBJECT('Excel.Application') RELEASE goExcel ... Визуализируйте это через Combobox, куда и внесите ваши Офисы: .AddItem('Excel.Application.<версия>') В Стартер, если что, вообще нет VBA. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2015, 15:42 |
|
определить версию офиса из фокса.
|
|||
---|---|---|---|
#18+
Ffffffffffffffffff, со Стартером вам сюда: http://www.sql.ru/forum/ms-office ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2015, 16:55 |
|
определить версию офиса из фокса.
|
|||
---|---|---|---|
#18+
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 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2015, 13:54 |
|
|
start [/forum/topic.php?fid=41&fpage=26&tid=1582400]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 266ms |
total: | 384ms |
0 / 0 |