2011-02-09 5 views
4

У нас есть приложение, которое, помимо многих других, имеет экспорт в функцию Excel. Это использует интерфейс COM Excel и просто экспортирует некоторые данные на новый лист в Excel и форматирует его так, как будто он появился. В течение многих лет мы знали, что если локаль машины настроена на нечто иное, чем Office, установленный под ним, появится «старый формат или недопустимая библиотека типов». Однако в Excel 2003 можно было установить и установить пакет MUI (многоязычный пользовательский интерфейс), чтобы устранить проблему. С Excel 2007 и более поздних версий, похоже, нет эквивалентного пакета - есть языковые пакеты (мы загрузили пакет из 7 ГБ из MSDN для Office 2007), но они либо не работают (setup.exe «поврежден»), либо работа в том смысле, что мы все еще получаем проблему с «старым форматом или недопустимой библиотекой типов».«старый формат или библиотека недопустимого типа»

Кто-нибудь знает, есть ли пакет для Office 2007 и Office 2010, который определенно решит эту проблему и откуда ее получить?

Кроме того, есть ссылка MS (http://support.microsoft.com/default.aspx?scid=kb;en-us;Q320369), которая показывает некоторый код (в VB.Net, я думаю), который якобы устанавливает культуру временно на «en-US» перед тем, как делать материал в Excel, а затем устанавливает его обратно. Я скептически отношусь к этому решению, потому что кажется, что первоначальная установка Office всегда будет «en_US». Что, если это был швейцарский немецкий? Кто-нибудь когда-либо успешно использовал этот подход, и они когда-либо делали в win32 Delphi, и можете ли вы поделиться несколькими фрагментами кода?

ответ

8

Правильным решением является передача LOCALE_USER_DEFAULT всякий раз, когда вы вызываете метод, который ожидает LCID. Что вы переходите к таким функциям?

Если вы это сделаете, вам не понадобится ни одна из этих магий MUI.

+0

Где бы мы ни проходили LCID, мы используем GetUserDefaultLCID, как определено в Windows.pas (функция GetUserDefaultLCID; внешнее имя ядра32 'GetUserDefaultLCID';). Теперь я изменил это на LOCALE_USER_DEFAULT, и все работает отлично! Большое спасибо за вашу помощь. –

+1

@Andrew Ошибка вашего отчета - это то, что происходит при передаче GetUserDefaultLCID, а культуры Excel и ОС не совпадают. Передайте 'LOCALE_USER_DEFAULT' вместо этого, и это будет все сладость и свет! –

+0

Все теперь сладость и свет! Я не могу поверить, какое горе было у нас с этим на протяжении многих лет, и как легко было это исправить! Еще раз спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^