2011-02-09 72 views
4

Excelの関数へのエクスポートがあるアプリケーションがあります。これは、ExcelのCOMインターフェイスを使用して、いくつかのデータをExcelの新しいシートに単純にエクスポートし、元の場所のようにフォーマットします。マシンのロケールが、Officeがインストールされているものとは何か異なるものに設定されている場合、「古い形式または無効な種類のライブラリ」が発生することが何年もわかっています。ただし、Excel 2003では、MUI(マルチ言語ユーザーインターフェイス)パックをダウンロードしてインストールして問題を解決することができました。 Excel 2007以降では同等のパックはないようです - 言語パック(Office 2007のMSDNから7GBのパックをダウンロード)がありますが、これらは動作しません(setup.exeは「破損しています」)、またはドン私たちはまだ "古いフォーマットか無効なタイプライブラリ"の問題が発生するという意味では機能しません。"古い形式または無効なタイプライブラリ"

この問題を確実に解決するOffice 2007およびOffice 2010用のパックがある場合は、誰でも知っていますか、どこから入手できますか?

また、Excelで内容を行う前に文化を一時的に「en-US」に設定しているコードをVBで表示するMSリンク(http://support.microsoft.com/default.aspx?scid=kb;en-us;Q320369)があります。元のOfficeのインストールは常に "en_US"であると思われるため、このソリューションについては懐疑的です。もしそれがスイスドイツ語だったら?誰もがこのアプローチをうまく使い、win32 Delphiでこれまで行ったことがありますか?いくつかのコードスニペットを共有できますか?

答えて

8

LCIDが必要なメソッドを呼び出すときには、正しい解決策はLOCALE_USER_DEFAULTを渡すことです。あなたはそのような機能に何を渡していますか?

これを行うと、このMUIマジックは必要ありません。

+0

ここでは、Windows.pas(関数GetUserDefaultLCID;外部カーネル32名 'GetUserDefaultLCID';)で定義されているGetUserDefaultLCIDを使用しているLCIDを渡す必要があります。私はこれをLOCALE_USER_DEFAULTに変更しました。ご協力いただき誠にありがとうございます。 –

+1

@Andrew GetUserDefaultLCIDを渡してExcelとOSのカルチャが一致しなかった場合のレポートのエラーです。代わりに 'LOCALE_USER_DEFAULT'を渡すと、それはすべて甘さと軽さになります! –

+0

今はすべて甘さと軽さです!私は何年にもわたってこれにどれくらいの悲しみがあったのか、それがいかに簡単に修正できるのか信じられない!再度、感謝します。 –

関連する問題