26 April 2014 COM, Excel Robert Muehsig

Wer diesen Blogpost über eine Suchmaschine gefunden hat der befindet sich vermutlich gerade in der COM Hölle von Office Addins.

Fehlermeldung:

Hier geht es um einen Fehler, der nicht bei allen Maschinen auftrat, sondern nur unter bestimmten Umständen.

Beim Zugriff über NetOffice auf die aktive Zelle bekam ich folgende Exception:

Code:-2147467259 Message:See inner exception(s) for details.

  -> Ein Aufrufziel hat einen Ausnahmefehler verursacht.

    -> Ausnahme von HRESULT: 0x800A03EC

Callstack:   bei System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)

   bei System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)

   bei NetOffice.Invoker.PropertySet(COMObject comObject, String name, Object[] value)   bei NetOffice.Invoker.PropertySet(COMObject comObject, String name, Object[] value)

Als der Code etwas umstruktuiert wurde bekam ich dann diese Fehlermeldung:

error (Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD)))

Die zweite Fehlermeldung führte mich zu diesem Stackoverflow Thread der letztendlich zu diesem führte.

Ursache:

Ich hatte auf einem de-CH Windows 7 ein en-US Office 2010 installiert. Bei dem Office fehlte aber das de-CH Sprachpaket. Scheinbar ist dies ein bekannter Bug von Office – der auch noch mit 2010 und evtl. auch 2013 auftritt.

Im letzten Thread ist das Problem gut zusammengefasst:

After digging the internet I found out that there is a bug in Microsoft Interop with COM objects (at least with my case which is MS Excel 2010).

The bug is that .NET checks that your thread (C# or VB code) localization is suitable to MS Excel localization you installed earlier, and if not it tells that the Microsoft.Office.Interop library is old or invalid.

Your thread localization is derived from your computer regional settings (from the control panel --> regional and language)

Workaround:

Variante a) Sprachpakete des Systems nachinstallieren.

Variante b) kurz vor dem Aufruf der Excel Methode die Culture des Threads auf “en-US” stellen.

Da mich dieser Wahnsinn etwas Zeit gekostet hat, wollte ich es für die Nachwelt hier reinstellen. Und da behaupten manche tatsächlich das Webentwicklung schwierig sei wegen ein paar Browsern. Desktop… Office… puh…


Written by Robert Muehsig

Software Developer - from Saxony, Germany - working on primedocs.io. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de