Autor Beitrag
owilsky
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Di 05.08.08 17:08 
Hallo, ich bin neu hier und hoffe auf Hilfe ;-)

ich möchte aus einer Excel-Datei einige Zeilen löschen. Dafür nutze ich COM und Excel muss auf dem Zielrechner installiert sein.
Wenn Excel nicht installiert ist, will ich eine Exception bekommen und stattdessen ADODB nutzen. Leider kann ADODB keine Zeilen/ Datensätze löschen, so dass ich hier nur die Zellen leere.

Aber hier soll es um die COM-Lösung gehen.
Das Problem ist, dass ich eine Exception-Dialogbox bekomme, wenn Excel nicht installiert ist, obwohl ich
1. das ganze mit try/catch abfange:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
try
{
  Microsoft.Office.Interop.Excel.Application ExcelObj = new Microsoft.Office.Interop.Excel.Application();
  Microsoft.Office.Interop.Excel.Workbook workbook = ExcelObj.Workbooks.Open(filename, 0false5""""true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t"falsefalse0truenullnull);
}
catch (Exception ex)
{
  Debug.WriteLine("COM Exception: " + ex.Message);
  Debug.WriteLine("COM does not seem to work.");
  Debug.Flush();
  result = false//use ADODB!
}


und
2. einen globalen Exception-Handler habe:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
static void Main(String[] args)
{
  AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);
  // ...

}

private static void OnUnhandledException(Object sender, UnhandledExceptionEventArgs e)
{
  Exception ex = e.ExceptionObject as Exception;
  if (ex != null)
  {
    // ...
  }
}

Keine der beiden Handler "catcht" diese Exception, so dass der User eine Exception-Meldung gekommt:
Zitat:
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' or one of its dependencies. Das System kann die angegebene Datei nicht finden.
File name: 'Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'


Ich habe absichtlich nicht using Microsoft.Office.Interop.Excel; benutzt, sondern immer im try-Block das "Microsoft.Office.Interop.Excel" davor geschrieben, das hilft aber nix.

Irgendeine Idee, wie ich einfach überprüfen kann, ob Excel installiert ist und welche Variante (COM/ADODB) ich nutzen kann?

Vielen Dank,
Oliver
Gogo
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 29.08.08 12:38 
hmm keine ahnung
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 29.08.08 13:31 
user profile iconowilsky hat folgendes geschrieben:
Ich habe absichtlich nicht using Microsoft.Office.Interop.Excel; benutzt, sondern immer im try-Block das "Microsoft.Office.Interop.Excel" davor geschrieben, das hilft aber nix.
Das ist nur Syntactic Sugar, kannst du ruhig verwenden.
Du musst den Inhalt des try-Blocks in eine eigene Methode auslagern, denn der Fehler wird vom JIT-Compiler ausgelöst, der vor dem Kompilieren erst einmal alle in der Methode referenzierten Typen laden muss. Und einen Fehler beim Kompilieren kann die Methode nun mal schlecht selbst abfangen, sondern nur eine übergeordnete Methode.

PS: Deinen catch-Block solltest du dann auch auf FileNotFoundException spezifizieren.

@Gogo: Überlege dir bitte scharf, ob dein Beitrag irgendwelchen Mehrwert für die Diskussion bietet.

_________________
>λ=
Gogo
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 29.08.08 13:40 
ja :) hatte auch erstmal ein vorschlag den ich gepostet habe aber dann ist mir nach einigen überlegungen klar geworden, dasss es qwatsch war und wollte meine antwort löschen aber kp wo das ging hab halt einfach editiert sorry xD