Lesen von allten Office-Formaten via Interop

02/04/2009 - 23:14 von Paul Werkowitz | Report spam
Hello Netizens,

das Statement

Excel.Workbook wb = exlApp.Workbooks.Open( ... )

gibt mir die COMException

Altes Format oder ungültige Typbibliothek. (Ausnahme von HRESULT:
0x80028018 (TYPE_E_INVDATAREAD))

wenn ich versuche, mit Office 2007 (Englisch) eine Office 2003 Datei (mit
deutschem Office erstellt) zu öffnen.
Ich gehe mal davon aus, dass man einen Konverter haben muss, der als
Parameter beim Open angegeben werden muss:

http://msdn.microsoft.com/en-us/lib...books.open(VS.80).aspx

Wie kriege ich die Liste der Converter? Mein Application-Objekt hat diese
Property nicht. Die Syntax

Excel.Application exlApp = new Excel.Application();
object obj = exlApp.FileConverters[0];

geht nicht - das member gibts einfach nicht, obwohl es in MSDN so steht.

Wo liegt hier der Fehler? Hàngt das mit dem Unterschied von Application und
_Application zusammen?

Greetz
Paule
 

Lesen sie die antworten

#1 Frank Dzaebel
03/04/2009 - 08:00 | Warnen spam
Hallo Paul,

das Statement
Excel.Workbook wb = exlApp.Workbooks.Open( ... )
gibt mir die COMException
Altes Format oder ungültige Typbibliothek. (Ausnahme von HRESULT:
0x80028018 (TYPE_E_INVDATAREAD))
wenn ich versuche, mit Office 2007 (Englisch) eine Office 2003 Datei
(mit deutschem Office erstellt) zu öffnen.
Ich gehe mal davon aus, dass man einen Konverter haben muss, der als
Parameter beim Open angegeben werden muss:



Ansich gilt:
höhere Office-Versionen haben mit dem Lesen
von tieferen Office-Versionen keine Probleme.
Nur tiefere benötigen ggf. einen Konverter, wenn sie
eine Datei einer einer höheren Version öffnen.

Du kannst also normal sogar eine Office 97
Datei mit einem Office 2007 öffnen. Dahinter
steckt nur COM, wo letztlich vereinfacht nur DispIDs
mit entsprechender Funktionalitàt bei neueren Versionen
hinzukommen.

Mal ein paar Troubleshooting-Fragen ...

1) Was passiert, wenn Du die Thread-Culture vorher auf Englisch setzt? ...

object n = Type.Missing;

private void Form1_Load(object sender, EventArgs e)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
string doc = @"DiesTest1.xls";
string path = Path.Combine(Application.StartupPath, doc);
Excel.Application exlApp = new Excel.ApplicationClass();
Excel.Workbook wb = exlApp.Workbooks.Open(path,
n, n, n, n, n, n, n, n, n, n, n, n, n, n);
exlApp.Visible = true;
MessageBox.Show(exlApp.Version);
}
_________

2) Welche Version der Interop-Libraries werden Dir
im Verweis-Fenster angezeigt?

Das sollten 12er Versionen sein und im GAC liegen,
zusammen mit der "Microsoft.Vbe.Interop".


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen