Конференция "Corba" » использован старый формат, либо библиотека имеет неверный тип [Delphi, Windows]
 
  • Magedon © (15.05.07 11:57) [0]
    Это такое сообщение Ехсель выдает.
    вот код


    procedure TMSOfficePlug.OnConnection(const HostApp: IDispatch;
     ext_ConnectMode: Integer; const AddInInst: IDispatch;
     var custom: PSafeArray);
    begin
    FIExcel := HostApp as ExcelApplication;

    ...

    FIExcel.DisplayAlerts[LCID] := False;// Здесь вылетает
    //и потом любое другое обращение к FIExcel вызывает ошибку
    //Потом Ексел умирает



    Стоит у меня:
    оффис 2000 (9.0.2720)
    Делфа 6

    Пытался использовать как делфовые компоненты так и импортировал через Import type library - результат один: с вордом все работает с екселем вылетает такое сообщение "использован старый формат, либо библиотека имеет неверный тип"

    Пытался гуглить тему - ссылок много, но конкретных ответов не нашел. Так же есть много битых.
    Возможно если бы знал английский вариант фразы мог бы найти побольше.

    ПОДСКАЖИТЕ ЛЮДИ ДОБРЫЕ ЧТО ЭТО ТАКОЕ И КАК С ЭТИМ БОРОТЬСЯ
  • clickmaker © (15.05.07 12:04) [1]
    uses Excel2000.pas?
  • Magedon © (15.05.07 12:09) [2]
    И Excel2000.pas и Excel_TLB.pas -  не работает
  • Magedon © (15.05.07 12:44) [3]
    Ага,  нашел вроде бы где собака порылась - у меня русский виндовз и англицкий екселя.(http://support.microsoft.com/default.aspx?scid=kb;EN-US;q320369)

    Только вот я не знаю на каких компьютерах будет работать мой код.
    Возможны различные комбинации типа индийцы на китайской винде с хебрюшным екселем.

    Вопрос тогда изменяется:
    Как узнать отличается ли локаль юзера от версии Екселя?

    Да еще  один вопрос как будет по делфиски следующее:

    Dim oldCI As System.Globalization.CultureInfo = _
       System.Threading.Thread.CurrentThread.CurrentCulture
    System.Threading.Thread.CurrentThread.CurrentCulture = _
       New System.Globalization.CultureInfo("en-US")

    ...

    System.Threading.Thread.CurrentThread.CurrentCulture = oldCI
  • clickmaker © (15.05.07 13:17) [4]
    так тебе наверно MAKELCID нужен?
    (sortid shl 16) or langid
  • Magedon © (15.05.07 15:08) [5]
    Я юзаю GetUserDefaultLCID. Видел где-то в примере.
    А вот как узнать локаль требуемую для Екселя
  • umbra © (15.05.07 15:14) [6]
    Application.International(xlCountryCode)

    ?
  • Magedon © (15.05.07 16:33) [7]
    нет, не работает
  • Magedon © (16.05.07 13:59) [8]
    Как получить версию Excel нашел:


    if XL.LanguageSettings.LanguageID[msoLanguageIDUI] = 1049
    {или $0419}
     then { Excel имеет русский интерфейс пользователя };


    Английская версия Excel (English United States) вернет 1033 (или $0409), немецкая (German Standard) - $0407. Значения соответствуют LCID, описанным в MS SDK Help "Language Identifiers".

    Вот только осталось понять как по делфийски будет

    Dim oldCI As System.Globalization.CultureInfo = _
      System.Threading.Thread.CurrentThread.CurrentCulture
    System.Threading.Thread.CurrentThread.CurrentCulture = _
      New System.Globalization.CultureInfo("en-US")

    ...

    System.Threading.Thread.CurrentThread.CurrentCulture = oldCI
  • clickmaker © (16.05.07 14:29) [9]
    SetThreadLocale(), что-ли?
    а зачем это для екселя, если там явно LCID фигурирует?
  • Magedon © (16.05.07 16:13) [10]
    Заработало так

    ...

     private
       FExcelLanguageID: integer;

    ...

    procedure TMSOfficePlug.OnConnection(const HostApp: IDispatch;
    ext_ConnectMode: Integer; const AddInInst: IDispatch;
    var custom: PSafeArray);
    begin
     FIExcel := HostApp as ExcelApplication;
     FExcelLanguageID := FIExcel.LanguageSettings.LanguageID[msoLanguageIDUI];
    ...

     FIExcel.DisplayAlerts[FExcelLanguageID ] := False;// Теперь все работает



    СПАСИБО ЗА ОТВЕТЫ
  • имя (23.03.09 21:34) [11]
    Удалено модератором
  • имя (23.03.09 21:34) [12]
    Удалено модератором
 
Конференция "Corba" » использован старый формат, либо библиотека имеет неверный тип [Delphi, Windows]
Есть новые Нет новых   [134430   +43][b:0][p:0.001]