Показать сообщение отдельно
Старый 21.12.2004, 10:21   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,713 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Вообще-то, работать с Excel достаточно просто, если уяснить его основную иерархию:

Application - WorkBook - WorkSheet - Range (Cell)

Application - это собственно тот COM-объект, который создается в памяти
WorkBook - это файл, открытый в этом COM-объекте
WorkSheet - это лист одного файла
Range - область листа (набор ячеек) к которому идет обращение

Если работа идет через класс ComExcelDocument_RU, то

Application - это переменная m_comApplication
WorkBook - это переменная m_comDocument

Чтобы вытащить эти переменные во вне надо создать специальные методы в этом классе, которые будут просто возвращать значение этих переменнх. Причем следует помнить, что для AXAPTA все эти переменные типа COM. Ну, что-то вроде

PHP код:
public COM getApplication()
{
    ;

    return 
m_comApplication;

Далее, следует помнить, что AXAPTA не поодерживает косвенные ссылки COM-объектов. Если почитать HELP по VBA в Excel (Открыть Excel, далее Alt+F11, далее F1), то по объекту LanguageSettings надо поступить примерно так:

PHP код:
static void Job_Excel(Args _args)
{
    
COMExcelDocument_RU     excel;
    
Com                     m_comApplication;
    
Com                     comLanguageSettings;
    ;

    
excel = new COMExcelDocument_RU();
    
excel.newFile('',true);
    
excel.visible(true);

    
m_comApplication excel.getApplication();  // это созданный выше метод
    
comLanguageSettings m_comApplication.LanguageSettings();

    print 
comLanguageSettings.LanguageID(1);
    
pause;
    return;

Вот с константами беда Какое именно значение имеют константы msoLanguageIDExeMode, msoLanguageIDHelp, msoLanguageIDInstall, msoLanguageIDUI, or msoLanguageIDUIPrevious я не в курсе. Методом тыка поставил единицу.

С возвращаемым значением полегче. Есть список констант в Word

PHP код:
#DEFINE.wdLanguageNone(0)
#DEFINE.wdNoProofing(1024)
#DEFINE.wdDanish(1030)
#DEFINE.wdGerman(1031)
#DEFINE.wdSwissGerman(2055)
#DEFINE.wdEnglishAUS(3081)
#DEFINE.wdEnglishUK(2057)
#DEFINE.wdEnglishUS(1033)
#DEFINE.wdEnglishCanadian(4105)
#DEFINE.wdEnglishNewZealand(5129)
#DEFINE.wdEnglishSouthAfrica(7177)
#DEFINE.wdSpanish(1034)
#DEFINE.wdFrench(1036)
#DEFINE.wdFrenchCanadian(3084)
#DEFINE.wdItalian(1040)
#DEFINE.wdDutch(1043)
#DEFINE.wdNorwegianBokmol(1044)
#DEFINE.wdNorwegianNynorsk(2068)
#DEFINE.wdBrazilianPortuguese(1046)
#DEFINE.wdPortuguese(2070)
#DEFINE.wdFinnish(1035)
#DEFINE.wdSwedish(1053)
#DEFINE.wdCatalan(1027)
#DEFINE.wdGreek(1032)
#DEFINE.wdTurkish(1055)
#DEFINE.wdRussian(1049)
#DEFINE.wdCzech(1029)
#DEFINE.wdHungarian(1038)
#DEFINE.wdPolish(1045)
#DEFINE.wdSlovenian(1060)
#DEFINE.wdBasque(1069)
#DEFINE.wdMalaysian(1086)
#DEFINE.wdJapanese(1041)
#DEFINE.wdKorean(1042)
#DEFINE.wdSimplifiedChinese(2052)
#DEFINE.wdTraditionalChinese(1028)
#DEFINE.wdSwissFrench(4108)
#DEFINE.wdSesotho(1072)
#DEFINE.wdTsonga(1073)
#DEFINE.wdTswana(1074)
#DEFINE.wdVenda(1075)
#DEFINE.wdXhosa(1076)
#DEFINE.wdZulu(1077)
#DEFINE.wdAfrikaans(1078)
#DEFINE.wdArabic(1025)
#DEFINE.wdHebrew(1037)
#DEFINE.wdSlovak(1051)
#DEFINE.wdFarsi(1065)
#DEFINE.wdRomanian(1048)
#DEFINE.wdCroatian(1050)
#DEFINE.wdUkrainian(1058)
#DEFINE.wdByelorussian(1059)
#DEFINE.wdEstonian(1061)
#DEFINE.wdLatvian(1062)
#DEFINE.wdMacedonian(1071)
#DEFINE.wdSerbianLatin(2074)
#DEFINE.wdSerbianCyrillic(3098)
#DEFINE.wdIcelandic(1039)
#DEFINE.wdBelgianFrench(2060)
#DEFINE.wdBelgianDutch(2067)
#DEFINE.wdBulgarian(1026)
#DEFINE.wdMexicanSpanish(2058)
#DEFINE.wdSpanishModernSort(3082)
#DEFINE.wdSwissItalian(2064) 
Т.е. если приведенный выше Job вернет 1049, то язык русский, а если 1033 - то английский. Правда, надо все-таки как-то уточнить значение константы передаваемой в метод LanguageID().

Чтобы уточнить синтаксис какой-либо команды непосредственно в Excel, используют встроенный в Excel макрорекодер. Т.е. запись всех действий пользователя, совершаемых в Excel. Пункт меню Сервис -> Макрос -> Начать запись.

Выполняешь все необходимые действия, далее останавливаешь запись, открываешь макрос на редактирование и смотришь, какая именно команда была использована. Правда, переносить один-к-одному код макрорекодера не нужно. Все эти Selection() явно лишние. Но, думаю, сообразишь как там что перевести. Ничего сложного.