EXCEL mit c# und interop öffnen ohne warnmeldungen

jduecker

Grünschnabel
Hallo, zusammen,
ich öffne in meiner .net-Anwendung (c#) eine Excel-Datei via Interop. Die Datei will beim öffnen vom Benutzer Zielzellen füllen (Pivot), was für mich aber gänzlich uninteressant ist. Ich benötige andere Daten aus einem anderen Sheet der Datei.
Mein öffnen-Befehl sieht so aus:
Code:
excelobj.DisplayAlerts = false;              
Excel.Workbook quelleWorkbook = excelobj.Workbooks.Open
                    (quelldateiname, false, true, 5, "", "", false, Excel.XlPlatform.xlWindows, "\t", false, false, false, 0, false, false);
excelobj.DisplayAlerts = true;
Jetzt wird zwar nicht mehr nachgefragt, ob die Zielzellen gefüllt werden sollen, aber es gibt einen COM-Interop- Fehler.
Was kann ich machen, dass die Datei so geöffnet wird, ohne Frage bzw. mit der Antwort Nein, nicht setzten oder auch ja setzten?
Vielen Dank schon mal!
jduecker
 
Hi, niggo,
die Systemfehlermeldung , die ich über Try und Catch rausbekomme ist:
Aufruf wurde durch Aufgerufenen abgelehnt. (Ausnahme von HRESULT: 0x80010001 (RPC_E_CALL_REJECTED))
Ohne den DisplayAlerts erhalte ich die Excel-Meldung:
Wollen Sie den Inhalt der Zielzellen in 6. Auswertungen ersetzten? ja/nein
Wobei 6. Auswertungen das Sheet ist, in dem mittels Pivot eben diese Zielzellen erstellt werden, was für mich aber total uninteressant ist. Ich benötige lediglich Daten aus einem anderen Sheet.
Ich hoffe, dass Dir diese Fehlermeldungen weiterhelfen.
Gruß
jduecker
 
die Systemfehlermeldung , die ich über Try und Catch rausbekomme ist:
Aufruf wurde durch Aufgerufenen abgelehnt. (Ausnahme von HRESULT: 0x80010001 (RPC_E_CALL_REJECTED))
Ohne den DisplayAlerts erhalte ich die Excel-Meldung:
Wollen Sie den Inhalt der Zielzellen in 6. Auswertungen ersetzten? ja/nein
Wobei 6. Auswertungen das Sheet ist, in dem mittels Pivot eben diese Zielzellen erstellt werden, was für mich aber total uninteressant ist. Ich benötige lediglich Daten aus einem anderen Sheet.
Nun habe ich mir mittels for-Schleife eine Pause gebastelt, mit der ich sol lange warte, bis ich "unfallfrei" das Excelobjekt ansprechen kann. Kein mir eigentlich nicht vorstellen, dass es keinen Befehl gibt, der das Programm veranlasst, so lange zu warten, bis ein Vorgang abgeschlossen ist.
Hat vielleicht irgend wer eine Idee, einen Ansatz?
Danke
jduecker
 
Probleme die dabei auftreten:
  • Berechnete Felder werden nicht mitgeliefert
  • Bei manchen Formatierungen kommen Felder auch nicht mit
Diese Punkte alleine reichen, warum das nicht wirklich eine Alternative darstellen kann.

Ein wesentlich besserer Weg:
Office-Erweiterung für das Open Document Format installieren, Datei im Office 2007 Format speichern und dieses dann importieren und einlesen. Wahlweise auch ein kleines Makro, welches diesen Vorgang automatisch macht, damit der User möglichst wenig Aufwand und "Stress" dadurch hat.
 
Probleme die dabei auftreten:
  • Berechnete Felder werden nicht mitgeliefert
  • Bei manchen Formatierungen kommen Felder auch nicht mit
Diese Punkte alleine reichen, warum das nicht wirklich eine Alternative darstellen kann.

Ich kann nur aus meiner Erfahrung sprechen (ob es allgemeingültig ist, weiß ich leider nicht, hat aber mit jeder aus dem Projekt stammenden Datei funktioniert), wenn man Zeile für Zeile den Select-Befehl absetzt ... ist zwar umständlicher, geht aber immer noch um ein Vielfaches schneller als über Interop. Immerhin soviel schneller bei umfangreichen Excelsheets, dass sich dieser Aufwand lohnt.

In meinem Fall wird Excel auf eine Web-Server eingesetzt (möchte einem möglichen Hinweis zuvorkommen: Nicht meine Entscheidung. Wenn der Auftraggeber darauf besteht, muss man das beste daraus machen).

Wenn die Ergebnisse per VBA-Code erstellt und anschließend per Interop ausgelesen werden, dauert das mehr 5 Minuten (sind mehrere sehr umfangreiche Sheets). So lange kann keiner warten. Mit OleDbConnection eine "Sekundensache". und ich hatte nach dem zeilenweisen Zugriff keinerlei Probleme bislang. Versuche ich allerdings mit einem Select * ... die Seiten auszulesen, ist das Resultat tatsächlich fehlende Daten.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück