Discussion:
Excel Sheet über C# anpassen
(zu alt für eine Antwort)
Andre Grumbach
2006-09-05 11:58:05 UTC
Permalink
Hallo zusammen,
ich weiß leider nicht ob ich hier richtig bin, jedoch versuche ich derzeit
ein Excel Dokument über C# zu erstellen.

Das Erstellen und Eintragen funktioniert soweit. Auch kann ich weitere Sheet
hinzufügen.

Jedoch habe ich bei den 'Anpassungen' an den jeweiligen Sheets noch
Probleme.

So klappt zur Zeit folgendes noch nicht:
- Hinzufügen von neuen Spalten (z.B. Neue Spalte an Pos 4 hinzufügen)
- Zusammenführen von mehreren Zellen
- Breite von Spalten festlegen

Kann mir jemand sagen wie ich diese Punkte umsetzen kann?

Ich arbeite derzeit mit VS 2003 (d.h. .Net 1.1).

Des Weiteren wäre es gut wenn jemand einen Link für eine gute (und vorallem
überischtliche) Dokumentation hat.

Vielen Dank,
Andre Grumbach
Thomas Ramel
2006-09-05 12:42:12 UTC
Permalink
Grüezi Andre

Andre Grumbach schrieb am 05.09.2006
Post by Andre Grumbach
ich weiß leider nicht ob ich hier richtig bin, jedoch versuche ich derzeit
ein Excel Dokument über C# zu erstellen.
Das Erstellen und Eintragen funktioniert soweit. Auch kann ich weitere Sheet
hinzufügen.
Jedoch habe ich bei den 'Anpassungen' an den jeweiligen Sheets noch
Probleme.
- Hinzufügen von neuen Spalten (z.B. Neue Spalte an Pos 4 hinzufügen)
- Zusammenführen von mehreren Zellen
- Breite von Spalten festlegen
Kann mir jemand sagen wie ich diese Punkte umsetzen kann?
Wenn Du uns sagt, wie Du bisher vorgegangen bist - gerne....

Arbeitest Du mit dem Excel-Objekt, mit ADO oder sonstwie?
Post by Andre Grumbach
Ich arbeite derzeit mit VS 2003 (d.h. .Net 1.1).
Des Weiteren wäre es gut wenn jemand einen Link für eine gute (und vorallem
überischtliche) Dokumentation hat.
Der Objekt-Explorer bietet IMO alles was das Herz begehrt - auch der
Makro-Redorder in Excel selbst kann gute Dienste leisten um an die
entprechenden Objekte und deren Syntax heranzukommen.



Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Andre Grumbach
2006-09-05 13:08:03 UTC
Permalink
Hallo Thomas,
also ich arbeite mit dem Excel Objekt Model (jedenfalls hab ich inene
Verweis auf die Microsoft Excel 11.0 Object Lib und die Microsoft Office
11.0 Object Lib gesetzt).

Hier greife ich über C# auf die jeweiligen Klassen zu.

Andre
Post by Thomas Ramel
Grüezi Andre
Andre Grumbach schrieb am 05.09.2006
Post by Andre Grumbach
ich weiß leider nicht ob ich hier richtig bin, jedoch versuche ich derzeit
ein Excel Dokument über C# zu erstellen.
Das Erstellen und Eintragen funktioniert soweit. Auch kann ich weitere Sheet
hinzufügen.
Jedoch habe ich bei den 'Anpassungen' an den jeweiligen Sheets noch
Probleme.
- Hinzufügen von neuen Spalten (z.B. Neue Spalte an Pos 4 hinzufügen)
- Zusammenführen von mehreren Zellen
- Breite von Spalten festlegen
Kann mir jemand sagen wie ich diese Punkte umsetzen kann?
Wenn Du uns sagt, wie Du bisher vorgegangen bist - gerne....
Arbeitest Du mit dem Excel-Objekt, mit ADO oder sonstwie?
Post by Andre Grumbach
Ich arbeite derzeit mit VS 2003 (d.h. .Net 1.1).
Des Weiteren wäre es gut wenn jemand einen Link für eine gute (und vorallem
überischtliche) Dokumentation hat.
Der Objekt-Explorer bietet IMO alles was das Herz begehrt - auch der
Makro-Redorder in Excel selbst kann gute Dienste leisten um an die
entprechenden Objekte und deren Syntax heranzukommen.
Mit freundlichen Grüssen
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Thomas Ramel
2006-09-05 13:39:31 UTC
Permalink
Grüezi Andre

Andre Grumbach schrieb am 05.09.2006
Post by Andre Grumbach
also ich arbeite mit dem Excel Objekt Model (jedenfalls hab ich inene
Verweis auf die Microsoft Excel 11.0 Object Lib und die Microsoft Office
11.0 Object Lib gesetzt).
OK, das habe ich mir schon fast gedacht.
Post by Andre Grumbach
Hier greife ich über C# auf die jeweiligen Klassen zu.
Dann ists relativ einfach:

Führe in Excel die gewünschten Schritte durch und lasse dabei den
Makro-Recorder mitlaufen.
Der so in Excel aufgezeichnete Code liefert dir dann alle notwendigen
Objekte und auch deren Syntax.

Übertrage dann diese gewonnenen Erkenntnisse in deinen C#-Code.

Wenn Du weiter Unterstützung benötigst, dann melde dich hier bitte wieder
mit den relevanten Zeilen deines Codes.




Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Andre Grumbach
2006-09-05 14:29:26 UTC
Permalink
Hallo Thomas,
Erst Einmal Danke, das mit dem Makro Rekorder wusste ich noch nicht.

Also eines der Punkte konnte ich lösen, jedoch habe ich beim Spalten
einfügen und mehrere Zellen Markieren weiterhin Probleme.

Hier den Code den ich im Makro Rekorder angezeigt bekomme:

Spalte einfügen:
Columns("G:G").Select
Selection.Insert Shift:=xlToRight

Zellen Markieren:
Range("C4:G15").Select

Wie setze ich die beiden Befehle in C# um.

Für Spalten einfügen bekomme ich immer ein Fehler bei
Microsoft.Office.Interop.Excel.Range rg =
(Microsoft.Office.Interop.Excel.Range)sheet.Cells["G", "G"];

Zelle markieren weiß ich leider nicht genau wie ich es angeben muss.

Hast irgend ne andere Idee?

Danke,
Andre
Post by Thomas Ramel
Grüezi Andre
Andre Grumbach schrieb am 05.09.2006
Post by Andre Grumbach
also ich arbeite mit dem Excel Objekt Model (jedenfalls hab ich inene
Verweis auf die Microsoft Excel 11.0 Object Lib und die Microsoft Office
11.0 Object Lib gesetzt).
OK, das habe ich mir schon fast gedacht.
Post by Andre Grumbach
Hier greife ich über C# auf die jeweiligen Klassen zu.
Führe in Excel die gewünschten Schritte durch und lasse dabei den
Makro-Recorder mitlaufen.
Der so in Excel aufgezeichnete Code liefert dir dann alle notwendigen
Objekte und auch deren Syntax.
Übertrage dann diese gewonnenen Erkenntnisse in deinen C#-Code.
Wenn Du weiter Unterstützung benötigst, dann melde dich hier bitte wieder
mit den relevanten Zeilen deines Codes.
Mit freundlichen Grüssen
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Thomas Ramel
2006-09-05 14:41:54 UTC
Permalink
Grüezi Andre

Andre Grumbach schrieb am 05.09.2006
Post by Andre Grumbach
Erst Einmal Danke, das mit dem Makro Rekorder wusste ich noch nicht.
Aber gerne doch - ich verwende ihn oft um an die Syntax und die Objekte zu
kommen....
Post by Andre Grumbach
Columns("G:G").Select
Selection.Insert Shift:=xlToRight
Range("C4:G15").Select
...aber leider krankt er stark an der .Select und .Activate-Seuche... :-(

'Sauber' über die Objekt-Methoden wäre das Einfügen einer Spalte am
entsprechenden Ort wie folgt:

Columns("G:G").Insert Shift:=xlToRight
Post by Andre Grumbach
Wie setze ich die beiden Befehle in C# um.
Für Spalten einfügen bekomme ich immer ein Fehler bei
Microsoft.Office.Interop.Excel.Range rg =
(Microsoft.Office.Interop.Excel.Range)sheet.Cells["G", "G"];
Hast irgend ne andere Idee?
Die Syntax von C# in diesem Zusammenhang ist mir nicht bekannt - Du hast
gesagt, dass Du bereits Werte eintragen und anders 'anstellen' kannst.
Hast Du die Codezeilen für diese Operatinen?
Dann könnten wir diese vermutlich anpassen....


Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Andre Grumbach
2006-09-05 15:47:59 UTC
Permalink
Klar hier:

Microsoft.Office.Interop.Excel.Range rg =
(Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, A];
rg.Value2 = "Spalte 1";
rg.Font.Bold = true;

rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "H"];
rg.Value2 = "Spalte 2";
rg.Font.Bold = true;

rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "I"];
rg.Value2 = "Spalte 3";
rg.Font.Bold = true;

rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "J"];
rg.Value2 = "Spalte 4";
rg.Font.Bold = true;

rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "K"];
rg.Value2 = "Spalte 5";
rg.Font.Bold = true;

rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "L"];
rg.Value2 = "Spalte 6";
rg.Font.Bold = true;

rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "M"];
rg.Value2 = "Spalte 7";
rg.Font.Bold = true;

rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "N"];
rg.Value2 = "Spalte 8";
rg.Font.Bold = true;
rg.ColumnWidth = 200;

Hier füge ich in der ersten Zeile mehrere 'Spaltenüberschriften' ein.
Die letzte Spalte wird auf 200px gesetzt.

Die Spalten A-G würde ich gern zusammenfügen.

Hoffe das bringt dir etwas, bzw. du kannst daraus nachvollziehen wie ich es
mit dem Spalte einfügen und zusammen fügen machen muss.

Danke,
Andre
Post by Thomas Ramel
Grüezi Andre
Andre Grumbach schrieb am 05.09.2006
Post by Andre Grumbach
Erst Einmal Danke, das mit dem Makro Rekorder wusste ich noch nicht.
Aber gerne doch - ich verwende ihn oft um an die Syntax und die Objekte zu
kommen....
Post by Andre Grumbach
Columns("G:G").Select
Selection.Insert Shift:=xlToRight
Range("C4:G15").Select
...aber leider krankt er stark an der .Select und .Activate-Seuche... :-(
'Sauber' über die Objekt-Methoden wäre das Einfügen einer Spalte am
Columns("G:G").Insert Shift:=xlToRight
Post by Andre Grumbach
Wie setze ich die beiden Befehle in C# um.
Für Spalten einfügen bekomme ich immer ein Fehler bei
Microsoft.Office.Interop.Excel.Range rg =
(Microsoft.Office.Interop.Excel.Range)sheet.Cells["G", "G"];
Hast irgend ne andere Idee?
Die Syntax von C# in diesem Zusammenhang ist mir nicht bekannt - Du hast
gesagt, dass Du bereits Werte eintragen und anders 'anstellen' kannst.
Hast Du die Codezeilen für diese Operatinen?
Dann könnten wir diese vermutlich anpassen....
Mit freundlichen Grüssen
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Thomas Ramel
2006-09-05 16:15:56 UTC
Permalink
Grüezi Andre

Andre Grumbach schrieb am 05.09.2006
Fein; lern ich auch gleich wieder was Neues :-)
Post by Andre Grumbach
Microsoft.Office.Interop.Excel.Range rg =
(Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, A];
rg.Value2 = "Spalte 1";
rg.Font.Bold = true;
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "H"];
rg.Value2 = "Spalte 2";
rg.Font.Bold = true;
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "I"];
rg.Value2 = "Spalte 3";
rg.Font.Bold = true;
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "J"];
rg.Value2 = "Spalte 4";
rg.Font.Bold = true;
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "K"];
rg.Value2 = "Spalte 5";
rg.Font.Bold = true;
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "L"];
rg.Value2 = "Spalte 6";
rg.Font.Bold = true;
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "M"];
rg.Value2 = "Spalte 7";
rg.Font.Bold = true;
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "N"];
rg.Value2 = "Spalte 8";
rg.Font.Bold = true;
rg.ColumnWidth = 200;
Hier füge ich in der ersten Zeile mehrere 'Spaltenüberschriften' ein.
Die letzte Spalte wird auf 200px gesetzt.
Ok, das begreife ich mal, denke ich
Post by Andre Grumbach
Die Spalten A-G würde ich gern zusammenfügen.
Komplett oder nur einzelne Zeilen?

Generell rate ich dir vom Zusammenfügen von zellen ab; das macht mehr
Probleme als es der Optik Vorteile bringt.

Für das Einfügen einer Spalte versuche mal das folgenden:

rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "G"];
rg.Insert Shift:=xlToRight



Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Microsoft Excel - Die ExpertenTipps
Andre G.
2006-09-05 20:19:49 UTC
Permalink
Hi Thomas,
also ich will imer nur die Spalten A-G in der Zeile markieren, in der ich
derzeit bin.
Post by Thomas Ramel
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "G"];
Funktioniert leider nicht richtig.
Hierbei wird nur die Zele G1 nach Rechts verschoben und dafür eine neue
Zelle eingefügt.
Für die Zellen G2-65535 macht es jedoch keinen unterschied.
Post by Thomas Ramel
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[Type.Missing,
"G:G"];
macht bewirkt auch keine Verbesserung.

Andre
Post by Thomas Ramel
Grüezi Andre
Andre Grumbach schrieb am 05.09.2006
Fein; lern ich auch gleich wieder was Neues :-)
Post by Andre Grumbach
Microsoft.Office.Interop.Excel.Range rg =
(Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, A];
rg.Value2 = "Spalte 1";
rg.Font.Bold = true;
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "H"];
rg.Value2 = "Spalte 2";
rg.Font.Bold = true;
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "I"];
rg.Value2 = "Spalte 3";
rg.Font.Bold = true;
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "J"];
rg.Value2 = "Spalte 4";
rg.Font.Bold = true;
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "K"];
rg.Value2 = "Spalte 5";
rg.Font.Bold = true;
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "L"];
rg.Value2 = "Spalte 6";
rg.Font.Bold = true;
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "M"];
rg.Value2 = "Spalte 7";
rg.Font.Bold = true;
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "N"];
rg.Value2 = "Spalte 8";
rg.Font.Bold = true;
rg.ColumnWidth = 200;
Hier füge ich in der ersten Zeile mehrere 'Spaltenüberschriften' ein.
Die letzte Spalte wird auf 200px gesetzt.
Ok, das begreife ich mal, denke ich
Post by Andre Grumbach
Die Spalten A-G würde ich gern zusammenfügen.
Komplett oder nur einzelne Zeilen?
Generell rate ich dir vom Zusammenfügen von zellen ab; das macht mehr
Probleme als es der Optik Vorteile bringt.
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "G"];
rg.Insert Shift:=xlToRight
Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Microsoft Excel - Die ExpertenTipps
Thomas Ramel
2006-09-05 20:48:52 UTC
Permalink
Grüezi Andre

Andre G. schrieb am 05.09.2006
Post by Andre G.
Post by Thomas Ramel
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "G"];
Funktioniert leider nicht richtig.
Hierbei wird nur die Zele G1 nach Rechts verschoben und dafür eine neue
Zelle eingefügt.
Für die Zellen G2-65535 macht es jedoch keinen unterschied.
Post by Thomas Ramel
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[Type.Missing,
"G:G"];
macht bewirkt auch keine Verbesserung.
Hmmm - Ok, dann mal die folgende Variation:

rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "G"];
rg.EntireRow.Insert Shift:=xlToRight



Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Microsoft Excel - Die ExpertenTipps
Andre G.
2006-09-06 06:39:13 UTC
Permalink
Hallo Thomas,
Post by Thomas Ramel
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "G"];
rg.EntireRow.Insert Shift:=xlToRight
funktioniert ebenfalls nicht. Dafür jedoch
Post by Thomas Ramel
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "G"];
rg.EntireColumn.Insert Shift:=xlToRight :)
Hast noch eine Idee zum zusammenfügen?

Danke,
Andre
Thomas Ramel
2006-09-06 06:54:35 UTC
Permalink
Grüezi Andre

Andre G. schrieb am 06.09.2006
Post by Andre Grumbach
Hallo Thomas,
Post by Thomas Ramel
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "G"];
rg.EntireRow.Insert Shift:=xlToRight
funktioniert ebenfalls nicht. Dafür jedoch
Post by Thomas Ramel
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "G"];
rg.EntireColumn.Insert Shift:=xlToRight :)
...scheint irgendwie logisch, ja ;-)
Post by Andre Grumbach
Hast noch eine Idee zum zusammenfügen?
Anstelle von .Cells() müsste eigentlich auch die Range()-Methode verwendbar
sein; daher versuche doch mal folgendes:

rg = (Microsoft.Office.Interop.Excel.Range)sheet.Range("A1:G1");
rg.Merge

oder ev. auch gleich direkt:

(Microsoft.Office.Interop.Excel.Range)sheet.Range("A1:G1").Merge

vielleicht auch noch die runden Klammern durch eckige austauschen.


Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Andre G.
2006-09-06 07:11:04 UTC
Permalink
Hi Thomas,
leider bekomme ich unter sheet keine Range Methode angezeigt.

Hast du eine Andere Idee?

Danke,
Andre
Post by Thomas Ramel
Grüezi Andre
Andre G. schrieb am 06.09.2006
Post by Andre Grumbach
Hallo Thomas,
Post by Thomas Ramel
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "G"];
rg.EntireRow.Insert Shift:=xlToRight
funktioniert ebenfalls nicht. Dafür jedoch
Post by Thomas Ramel
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "G"];
rg.EntireColumn.Insert Shift:=xlToRight :)
...scheint irgendwie logisch, ja ;-)
Post by Andre Grumbach
Hast noch eine Idee zum zusammenfügen?
Anstelle von .Cells() müsste eigentlich auch die Range()-Methode verwendbar
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Range("A1:G1");
rg.Merge
(Microsoft.Office.Interop.Excel.Range)sheet.Range("A1:G1").Merge
vielleicht auch noch die runden Klammern durch eckige austauschen.
Mit freundlichen Grüssen
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Andre G.
2006-09-06 13:36:24 UTC
Permalink
Hi Thomas,
also mit get_Range anstatt Range funktioniert es wunderbar.

Danke,
Andre
Post by Andre G.
Hi Thomas,
leider bekomme ich unter sheet keine Range Methode angezeigt.
Hast du eine Andere Idee?
Danke,
Andre
Post by Thomas Ramel
Grüezi Andre
Andre G. schrieb am 06.09.2006
Post by Andre Grumbach
Hallo Thomas,
Post by Thomas Ramel
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "G"];
rg.EntireRow.Insert Shift:=xlToRight
funktioniert ebenfalls nicht. Dafür jedoch
Post by Thomas Ramel
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "G"];
rg.EntireColumn.Insert Shift:=xlToRight :)
...scheint irgendwie logisch, ja ;-)
Post by Andre Grumbach
Hast noch eine Idee zum zusammenfügen?
Anstelle von .Cells() müsste eigentlich auch die Range()-Methode verwendbar
rg = (Microsoft.Office.Interop.Excel.Range)sheet.Range("A1:G1");
rg.Merge
(Microsoft.Office.Interop.Excel.Range)sheet.Range("A1:G1").Merge
vielleicht auch noch die runden Klammern durch eckige austauschen.
Mit freundlichen Grüssen
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Thomas Ramel
2006-09-06 14:04:47 UTC
Permalink
Grüezi Andre

Andre G. schrieb am 06.09.2006
Post by Andre G.
also mit get_Range anstatt Range funktioniert es wunderbar.
Na das ist ja fein - die Methoden aus C# heraus unterscheiden sich offenbar
ein wenig von denen in VBA.
Post by Andre G.
Danke,
Aber gerne - habe ich doch auch wieder was hinzugelernt :-)

Danke auch für dein Feedback.


Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Andre G.
2006-09-06 15:52:23 UTC
Permalink
Hi Thomas,
jetzt hab ich das nächste Problem.

Dieses mal mit dem AutoFilter.

Wenn ich mir das über den Makro Rekorder aufnehme und mir im Anschluss
anzeige, habe ich folgendes Makro:

Rows("1:1").Select
Selection.AutoFilter

Schön und Gut, jedoch benötigt in C# die AutoFilter Methode einige Paramter.

object AutoFilter(
[In, Optional] object Field,
[In, Optional] object Criteria1,
[In, Optional] XlAutoFilterOperator Operator,
[In, Optional] object Criteria2,
[In, Optional] object VisibleDropDown
);
Nun habe ich folgendes versucht:rg.EntireRow.AutoFilter("1", 101,
Microsoft.Office.Interop.Excel.XlAutoFilterOperator.xlAnd, 101, true);Mein
Problem ist jedoch, das ich eine DropDown angezeigt bekomme, jedoch nichts
auswählen bzw. betätigen kann.Hast du eine Idee, was die richtigen parameter
sind?Danke,Andre
Post by Thomas Ramel
Grüezi Andre
Andre G. schrieb am 06.09.2006
Post by Andre G.
also mit get_Range anstatt Range funktioniert es wunderbar.
Na das ist ja fein - die Methoden aus C# heraus unterscheiden sich offenbar
ein wenig von denen in VBA.
Post by Andre G.
Danke,
Aber gerne - habe ich doch auch wieder was hinzugelernt :-)
Danke auch für dein Feedback.
Mit freundlichen Grüssen
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Thomas Ramel
2006-09-06 16:17:24 UTC
Permalink
Grüezi Andre

Andre G. schrieb am 06.09.2006
Post by Andre G.
jetzt hab ich das nächste Problem.
Dieses mal mit dem AutoFilter.
:-)
Post by Andre G.
Wenn ich mir das über den Makro Rekorder aufnehme und mir im Anschluss
Rows("1:1").Select
Selection.AutoFilter
Ja, das 'erzeugt' die Autofilter-Buttons; jedoch wird noch nichts
gefiltert.
Post by Andre G.
Schön und Gut, jedoch benötigt in C# die AutoFilter Methode einige Paramter.
object AutoFilter(
[In, Optional] object Field,
[In, Optional] object Criteria1,
[In, Optional] XlAutoFilterOperator Operator,
[In, Optional] object Criteria2,
[In, Optional] object VisibleDropDown
);
Nun habe ich folgendes versucht:rg.EntireRow.AutoFilter("1", 101,
Microsoft.Office.Interop.Excel.XlAutoFilterOperator.xlAnd, 101, true);
Wonach willst Du denn filtern? Wie sind die Kirterien?
Soll dies nur in einer Spalte geschehen?
Post by Andre G.
Mein Problem ist jedoch, das ich eine DropDown angezeigt bekomme, jedoch
nichts auswählen bzw. betätigen kann.
Dieser DropDown ist dann in Excel, oder in deinem C#-Programm?
Hast Du in der Excel-Tabelle denn schon Wert unterhalb der
Spaltenüberschriften eingetragen?
Der Autofilter-DropDown liefert die Unikate der Inhalte der Spalte als
Auswahl für eine schnelle Filterung.

Die Optionalen Parameter sind für eine programmtechnisch gesteuerte
Filterung gedacht - die gibt es auch in VBA. Sobald Du in Excel nach einem
Wert filterst, werden diese Parameter bei der Aufzeichnung auch mit
ausgeworfen.
Post by Andre G.
Hast du eine Idee, was die
richtigen parameter sind?
[In, Optional] object Field
--> wäre die erste Zelle der Spalte in der gefiltert wird

[In, Optional] object Criteria1,
--> wäre das erste Kriterium also der Inhalt auf den gefiltert wird

[In, Optional] XlAutoFilterOperator Operator,
--> wäre die Und/oder-Verknüfung der Kriterien

[In, Optional] object Criteria2,
--> wäre das zweite Kriterium also der Inhalt auf den gefiltert wird

[In, Optional] object VisibleDropDown
--> wäre dann wohl, ob der DropDown angezeigt werden soll oder nicht


Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Microsoft Excel - Die ExpertenTipps
Andre G.
2006-09-07 08:05:11 UTC
Permalink
Hallo Thomas,
also folgendes:

Wenn ich das Excel Sheet ohne normal erstelle (ohne Filter) und es
anschließend noch einmal öffne, kann ich doch über Daten->Filter.>AutoFilter
einen 'Filter über die komplette erste Spalte ersten (vorausgesetzt ich habe
sie markiert).

Jetzt wird jedoch noch nach nichtgefilter, sonden ich habe nur die
Buttons/Drop Downs zum Filter (wenn ich den jeweiligen Button beätige habe
ich alle Einträge die unter der Spalte stehen drin und zusätzlich noch
sortieren ersten 10,...)

Das selbe versuche ich nun auch mit C# auto. in dieses Dokument einzufügen.

Hierzu gehe ich wie folgt vor:

1. Hinzufügen der Spaltenüberschriften
2. Einfügend er Daten
3. Filter Erstellen mit:
Microsoft.Office.Interop.Excel.Range rg =
(Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "A"];
rg.EntireColumn.AutoFit();
rg.EntireRow.AutoFilter("1", "All",
Microsoft.Office.Interop.Excel.XlAutoFilterOperator.xlAnd, "All", true);

Wenn ich nun jedoch das Excel Sheet öffne, habe ich zwar die Buttons/Drop
Downs in Excel bei den jeweiligen Spalten,
jedoch kann ich die Buttons nicht betätigen bzw. bekomme keine Einträge
darunter angezeigt (Datensätze sind jedoch schon vorhanden).
Außerdem werden diese Buttons wieder gelöscht, wenn ich in irgend einem Feld
die Delete Taste beätige (dies kann auch durch Rückgängig nicht wieder
Rückgängig gemacht werden).

Hoffe du kannst mit den Infos etwas anfangen.

Andre
Post by Thomas Ramel
Grüezi Andre
Andre G. schrieb am 06.09.2006
Post by Andre G.
jetzt hab ich das nächste Problem.
Dieses mal mit dem AutoFilter.
:-)
Post by Andre G.
Wenn ich mir das über den Makro Rekorder aufnehme und mir im Anschluss
Rows("1:1").Select
Selection.AutoFilter
Ja, das 'erzeugt' die Autofilter-Buttons; jedoch wird noch nichts
gefiltert.
Post by Andre G.
Schön und Gut, jedoch benötigt in C# die AutoFilter Methode einige Paramter.
object AutoFilter(
[In, Optional] object Field,
[In, Optional] object Criteria1,
[In, Optional] XlAutoFilterOperator Operator,
[In, Optional] object Criteria2,
[In, Optional] object VisibleDropDown
);
Nun habe ich folgendes versucht:rg.EntireRow.AutoFilter("1", 101,
Microsoft.Office.Interop.Excel.XlAutoFilterOperator.xlAnd, 101, true);
Wonach willst Du denn filtern? Wie sind die Kirterien?
Soll dies nur in einer Spalte geschehen?
Post by Andre G.
Mein Problem ist jedoch, das ich eine DropDown angezeigt bekomme, jedoch
nichts auswählen bzw. betätigen kann.
Dieser DropDown ist dann in Excel, oder in deinem C#-Programm?
Hast Du in der Excel-Tabelle denn schon Wert unterhalb der
Spaltenüberschriften eingetragen?
Der Autofilter-DropDown liefert die Unikate der Inhalte der Spalte als
Auswahl für eine schnelle Filterung.
Die Optionalen Parameter sind für eine programmtechnisch gesteuerte
Filterung gedacht - die gibt es auch in VBA. Sobald Du in Excel nach einem
Wert filterst, werden diese Parameter bei der Aufzeichnung auch mit
ausgeworfen.
Post by Andre G.
Hast du eine Idee, was die
richtigen parameter sind?
[In, Optional] object Field
--> wäre die erste Zelle der Spalte in der gefiltert wird
[In, Optional] object Criteria1,
--> wäre das erste Kriterium also der Inhalt auf den gefiltert wird
[In, Optional] XlAutoFilterOperator Operator,
--> wäre die Und/oder-Verknüfung der Kriterien
[In, Optional] object Criteria2,
--> wäre das zweite Kriterium also der Inhalt auf den gefiltert wird
[In, Optional] object VisibleDropDown
--> wäre dann wohl, ob der DropDown angezeigt werden soll oder nicht
Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Microsoft Excel - Die ExpertenTipps
Thomas Ramel
2006-09-07 09:18:30 UTC
Permalink
Grüezi Andre

Andre G. schrieb am 07.09.2006
Post by Andre G.
Wenn ich das Excel Sheet ohne normal erstelle (ohne Filter) und es
anschließend noch einmal öffne, kann ich doch über Daten->Filter.>AutoFilter
einen 'Filter über die komplette erste Spalte ersten (vorausgesetzt ich habe
sie markiert).
*Soll* das denn so sein?

Üblicherweise wird der Autofilter gesetzt und 'sucht' sich von selbst die
Spaltenüberschriften um seine DropDown Pfeile zu setzen.

Nur dann wenn dieser in nur einer Spalte stehen soll muss markiert oder
festgelegt werden - ich würde darauf verzichten, dies zu tun.
Post by Andre G.
Jetzt wird jedoch noch nach nichtgefilter, sonden ich habe nur die
Buttons/Drop Downs zum Filter (wenn ich den jeweiligen Button beätige habe
ich alle Einträge die unter der Spalte stehen drin und zusätzlich noch
sortieren ersten 10,...)
Das sagt mir, dass Du mit xl2003 arbeitest?
Post by Andre G.
Das selbe versuche ich nun auch mit C# auto. in dieses Dokument einzufügen.
1. Hinzufügen der Spaltenüberschriften
2. Einfügend er Daten
Microsoft.Office.Interop.Excel.Range rg =
(Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "A"];
rg.EntireColumn.AutoFit();
Bis hieher OK
Post by Andre G.
rg.EntireRow.AutoFilter("1", "All",
Microsoft.Office.Interop.Excel.XlAutoFilterOperator.xlAnd, "All", true);
Zum einfachen Setzen des Autofilters ist es nicht notwendig bereits
Kriterien festzulegen.

IMO müsste folgendes reichen; .EntireRow ist IMO nicht notwendig:

rg.AutoFilter
Post by Andre G.
Wenn ich nun jedoch das Excel Sheet öffne, habe ich zwar die Buttons/Drop
Downs in Excel bei den jeweiligen Spalten,
jedoch kann ich die Buttons nicht betätigen bzw. bekomme keine Einträge
darunter angezeigt (Datensätze sind jedoch schon vorhanden).
Außerdem werden diese Buttons wieder gelöscht, wenn ich in irgend einem Feld
die Delete Taste beätige (dies kann auch durch Rückgängig nicht wieder
Rückgängig gemacht werden).
Da ist irgenwas schief gegangen, in der Tat.


Prinzipiell stellt sich mir die Frage, warum Du die Excel-Datei 'zu Fuss'
komplett erstellen willst.
Wäre es nicht einfacher eine entsprechend vorbereitete Mappe einfach zu
öffnen und dann nur noch mit den Daten zu befüllen?




Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Andre Grumbach
2006-09-08 09:57:16 UTC
Permalink
Hallo Thomas,

sorry hatte die letzten zwei Tage keinen Internet Zugang, deswegen kommt
erst heute die Antwort.

Also folgendes:
1. Ich habe Office 2003 installiert und Speicher das Dokument als
XlFileFormat.xlWorkbookNormal ab (somit geh ich davon aus das es Excel 2003
ist)
2. Über den Makro Recorder habe ich ebenfalls gesehen, das die AutoFilter
Methode in Excel keine Parameter benötigt, jedoch wird von C# für den
Methodenaufruf die Paramter benötigt.

Hast du somit eine Idee wieso es nicht klappt?

Danke,
Andre
Post by Thomas Ramel
Grüezi Andre
Andre G. schrieb am 07.09.2006
Post by Andre G.
Wenn ich das Excel Sheet ohne normal erstelle (ohne Filter) und es
anschließend noch einmal öffne, kann ich doch über
Daten->Filter.>AutoFilter
einen 'Filter über die komplette erste Spalte ersten (vorausgesetzt ich habe
sie markiert).
*Soll* das denn so sein?
Üblicherweise wird der Autofilter gesetzt und 'sucht' sich von selbst die
Spaltenüberschriften um seine DropDown Pfeile zu setzen.
Nur dann wenn dieser in nur einer Spalte stehen soll muss markiert oder
festgelegt werden - ich würde darauf verzichten, dies zu tun.
Post by Andre G.
Jetzt wird jedoch noch nach nichtgefilter, sonden ich habe nur die
Buttons/Drop Downs zum Filter (wenn ich den jeweiligen Button beätige habe
ich alle Einträge die unter der Spalte stehen drin und zusätzlich noch
sortieren ersten 10,...)
Das sagt mir, dass Du mit xl2003 arbeitest?
Post by Andre G.
Das selbe versuche ich nun auch mit C# auto. in dieses Dokument einzufügen.
1. Hinzufügen der Spaltenüberschriften
2. Einfügend er Daten
Microsoft.Office.Interop.Excel.Range rg =
(Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, "A"];
rg.EntireColumn.AutoFit();
Bis hieher OK
Post by Andre G.
rg.EntireRow.AutoFilter("1", "All",
Microsoft.Office.Interop.Excel.XlAutoFilterOperator.xlAnd, "All", true);
Zum einfachen Setzen des Autofilters ist es nicht notwendig bereits
Kriterien festzulegen.
rg.AutoFilter
Post by Andre G.
Wenn ich nun jedoch das Excel Sheet öffne, habe ich zwar die Buttons/Drop
Downs in Excel bei den jeweiligen Spalten,
jedoch kann ich die Buttons nicht betätigen bzw. bekomme keine Einträge
darunter angezeigt (Datensätze sind jedoch schon vorhanden).
Außerdem werden diese Buttons wieder gelöscht, wenn ich in irgend einem Feld
die Delete Taste beätige (dies kann auch durch Rückgängig nicht wieder
Rückgängig gemacht werden).
Da ist irgenwas schief gegangen, in der Tat.
Prinzipiell stellt sich mir die Frage, warum Du die Excel-Datei 'zu Fuss'
komplett erstellen willst.
Wäre es nicht einfacher eine entsprechend vorbereitete Mappe einfach zu
öffnen und dann nur noch mit den Daten zu befüllen?
Mit freundlichen Grüssen
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Thomas Ramel
2006-09-08 14:49:48 UTC
Permalink
Grüezi Andre

Andre Grumbach schrieb am 08.09.2006
Post by Andre Grumbach
sorry hatte die letzten zwei Tage keinen Internet Zugang, deswegen kommt
erst heute die Antwort.
Kein Problem, ich bin auch eben erst aus der Schule nach Hause gekommen....
Post by Andre Grumbach
1. Ich habe Office 2003 installiert und Speicher das Dokument als
XlFileFormat.xlWorkbookNormal ab (somit geh ich davon aus das es Excel 2003
ist)
Ich kenne deinen kompletten Code nicht, gehe jedoch davon aus, dass Du mit
einer in C# erzeugten Excel-Instanz arbeitest und dann dürfte diese in der
Tat xl2003 sin.
Post by Andre Grumbach
2. Über den Makro Recorder habe ich ebenfalls gesehen, das die AutoFilter
Methode in Excel keine Parameter benötigt, jedoch wird von C# für den
Methodenaufruf die Paramter benötigt.
...wird denn sonst eine Fehlermeldung ausgeworfen?
Post by Andre Grumbach
Post by Andre G.
object AutoFilter(
[In, Optional] object Field,
[In, Optional] object Criteria1,
[In, Optional] XlAutoFilterOperator Operator,
[In, Optional] object Criteria2,
[In, Optional] object VisibleDropDown
würde ich darauf tippen, dass all diese Parameter nur optional sind und
dann erst Verwendung finden, wenn Du explizit nach einem Kriterium filtern
willst.
Post by Andre Grumbach
Hast du somit eine Idee wieso es nicht klappt?
Du hast die Anpassungen wie ich sie vorgeschlagen habe step-by-step
getestet? Welche Ergebnisse und ev. Fehlermeldungen hast Du erhalten?

Wie gesagt stellt sich mir hier eher noch die grundsätzliche Frage, warum
Du nicht eine vorher gestaltete Mappe öffnest und bloss noch mit Daten
befüllst......



Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Microsoft Excel - Die ExpertenTipps
Loading...