mikrocontroller.net

Forum: PC-Programmierung Excel-Daten mit VB.Net2005 auslesen


Autor: Rage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bin inzwischen kurz vor dem Aufgeben, ich hoffe hier kenn mir jemand
weiterhelfen. Ich möchte Daten aus einer Excel-Datei als Referenz in
VB.Net2005 einlesen. Habe dazu auch schon was gefunden:
http://www.activevb.de/tipps/vb6tipps/tipp0050.html

Jedoch ist das mit VB6 und funktioniert mit vb.net 2005 nicht. Den
Verweis auf Excel habe ich gemacht, aber es will einfach nicht. Kann
mir jemand weiterhelfen? Am liebsten wäre mir der umgang wie im
VB6-Beispiel gezeigt wird.

Autor: Peter S. (peter) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als erstes musst du über Projekt->Verweis hinzufügen->COM einen Verweis
auf Excel hinzufügen (müsste ungefähr so heißen: "Microsoft Excel 11.0
Object Library").

Code:

Dim Excel1 As New Excel.Application
Excel1.Workbooks.Open("C:\excel.xls")
Excel1.Visible = True

'deine Operationen (z.B. Excel1.Range("A2").Select()

Excel1.ActiveWorkbook.Close()
Excel1.Workbooks.Close()
Excel1.Visible = False

Autor: Peter S. (peter) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch ein Tipp:

Falls du nicht weißt, welchen Code du für welche Operation brauchst
kannst du in Excel über Extras->Makro->"Aufzeichenen..." eine
Makroaufnahme starten. Dann manuell deine Operationen durchführen und
dann die Aufnahme beenden. Nun kannst du dir über Extras->Makro->Visual
Basic-Editor deine durchgeführten Aktionen als VB-Code anschauen und in
dein VB.NET Projekt kopieren.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau Dir mal folgendes openbook an:
http://www.galileocomputing.de/openbook/vb_net/
Beispiele/Anleitung zu Dateioperation und speziell zu Excell,
funktioniert alles wunderbar.
Viel Erfolg.

Autor: Rage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jo danke, hat prima geklappt.

Autor: Kei (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo, ich bin per zufall mal hier gelandet weil ich auch was suche um
mit vb.net excel dateien bearbeiten möchte, aber vb meckert schon bei

Dim Excel1 As New Excel.Application


den verweis hab ich auch gemacht, aber das einzige was ich auswählen
kann wenn ich "excel." tippe, ist "Form1" und "My"

kann mir wer da nen tip geben?

thx schonmal

Autor: Peter S. (peter) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahrscheinlich heißt dein Projekt "excel". Versuche es mal mit einem
anderen Projektnamen. Dann müßte es funktionieren.

Autor: Kei (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also das projekt heißt nu nicht mehr excel und nu bekomm ich nur die
meldung:

der typ excel.application ist nicht definiert


und das wars :/

Autor: Azrael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
im VB-Manager
Unter Extras->Verweise
dort sollte Excel aktiviert sein.

Ich hatte so ein ähnliches problem als ich von Word aus auf ein
Excel-Sheet zugreifen wollte

mfg Azrael

Autor: Kei (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
thx für die hilfe, mit:

Dim Excel1 As New Microsoft.Office.Interop.Excel.Application

funktionierts nun

Autor: Nik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen.

ich habe ein änliches problem, ich möchte mit vb.net aus excel daten
auslesen.

bin anfänger und komme da irgendwie nicht weiter, hat mir jemand ein
beispielcode.

Danke gruss

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liefern die über deiner Anfrage stehenden Antworten nicht genug
Informationen? In Excel gibt es einen Makrorekorder, wenn man ihn
verwendet kann man sich das erzeugte Makro als Code anschauen. Auf die
selben Objekte, in der gleichen Weise, kann man auch in VB.Net
zugreifen.
Also einfacher ist nur noch jemanden dafür zu bezahlen, dass er es
einem programmiert.
Beispielcode ist im Netz genügend zu finden oder du benutzt erstmal die
Links die hier im Thread angegeben sind.

Autor: Nik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe es mir zu herzen genommen.

öffnen kann ich nun das Excel dokument.

habe mich schlau gemacht unter den links, übrigens prima infos.
nun habe ich doch gewisse probleme mit einlesen besser gesagt
auslesen.

wie kann ich den wert der Zelle weiter verwenden wie in eine Variable
schreiben.
und wie wieder zurück.

danke für die Hilfe

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wie kann ich den wert der Zelle weiter verwenden wie in eine Variable
>schreiben. und wie wieder zurück.

Dein Hauptproblem ist wahrscheinlich das du erstmal nicht weisst wie
das Objekt heisst ,das du verwenden musst. Also benutze den
Makrorekorder in Excel.
Mache das was du machen willst und stoppe den Makrorekorder  und schau
dir das erzeugte Makro im Quellcode an. Das ist VBA Code der ist
eigentlich gleich, du siehst wie er zugreift und welche Objekte er
benutzt. Diese kannst du auch benutzen über
Microsoft.Office.Interop.Excel.xx
xx für das jeweilige Object in Excel (muss natürlich mit Dim ...
erzeugt werden. Mit dieser Methode kommt man eigentlich sehr weit. Wenn
nicht, sollte man sich ein Buch zur Einführung erstmal zu Gemüte
führen.
Also für deine Frage:
Makrorecorder an
klicke auf die Zelle ,ändere deren Wert
Makrorecorder aus
Schau dir das Makro an
verstehe es und schmeiss das überflüssige raus.
Mach den Zugriff von VB aus.

Autor: Nik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok so unrecht hast du ja nicht, ich verstehe hier nicht mehr alles.

ein Variablen inhalt wie ein Name übergebe ich der Funktion.

Nun möchte ich den wert ins Excel übertragen, aber das ziel wäre es,
wenn es den Namen schon gibt, in der Zweiten spalte hochzählen.

nun stehe ich mal an, wie bringe ich den wert denn ich über die Funkton
bekommen habe in eine Celle, sorry das schaffe ich nun nicht.

habe nun mal den Code hier, ergibt eine Fehlermeldung.

Private Function Schreiben(ByVal Name As String) As String

        Dim Excel1 As New Excel.Application

        Excel1.Workbooks.Open("G:\Import\2005\import.xls")
        Excel1.Visible = True

        Dim xlsDatei As Excel.Workbook
        Dim xlsTabelle As Excel.Worksheet
        Dim xlsZelle As String

        xlsZelle = cstr(xlsTabelle.Cells(2, 1)) 'hier stürzt das
programm siehe Fehlermeldung

        MsgBox(xlsZelle)

        Excel1.Save()
        Excel1.Workbooks.Close()
        Excel1.Quit()

    End Function


Fehlermeldung: Zusätzliche Information: Der Objektverweis wurde nicht
auf eine Objektinstanz festgelegt.

das Buch habe ich hier, aber es hilft mir leider nicht weiter.

Danke für die Hilfe und geduld

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Excel1.Workbooks.Open("G:\Import\2005\import.xls")
das ist eine Funktion. Die liefert dir ein Workbookobjekt zurück mit
diesem musst du arbeiten!

Die Fehlermeldung ist absolut korrekt
>Fehlermeldung: Zusätzliche Information: Der Objektverweis wurde nicht
>auf eine Objektinstanz festgelegt.
du hast mit deinem
>Dim xlsTabelle As Excel.Worksheet
ein (anderes) Worksheet erzeugt ohne Workbook und versuchst in diesem
auf die Zellen zuzugreifen.
Du willst aber (denke ich) auf das Worksheet von G:Import... zugreifen
also benutze auch dessen WorkbookObjekt.

Autor: Sue (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab Probleme den oben angeführten Code zu implementieren.
Zum einen bietet er mir statt xlApp = New Excel.Application,
das : xlApp = New Excel._ExcelApplication an und zum zweiten gibt es
bei Excel.Workbooks kein Open...

Eingebunden hab ich die Bibliothek...
Es hat den Anschein als findet er die Typen gar nicht.

Hat da wer vielleicht eine hilfreiche Idee zu?

Danke!

Autor: Sue (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat sich erledigt.

Autor: Tarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe mir jetzt mal den Beitrag komplett durchgelesen und wohl
auch zum größten Teil verstanden. Das Öffnen des Excel-Blattes klappt
wunderbar.

Nur wie kann ich den Inhalt einer bestimmten Excel-Zelle in einem
bestimmten Tabellenblatt als Wert an eine Variable innerhalb meines
Programms übergeben? Nach etlichem Rumprobieren bin ich nun schon so
weit, dass ich per "intellisense" (dieses komische
"Autovervollständigen" von Visual Studio) einfach alle Kombinationen
ausprobiere. Aber das kann es ja nicht sein.

Mein Code:
    Private Sub read_from_xls(ByVal Pfad As String)
        Dim Dateiname As String = Dir(Pfad & "\*.xls")
        Dim Quellpfad As String = Pfad & Dateiname

        ' ### Excel-Dokument öffnen ###
        Dim Excel1 As New Excel.Application
        Excel1.Workbooks.Open(Quellpfad)
        Excel1.Visible = False


        Try
            ' ### Datenoperationen ###
            Dim Wert As String = Excel1.Range("C5") ' * Hier ist der
Fehler *
            MessageBox.Show(Wert, "Inhalt der Zelle")
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Fehler")
        End Try


        ' ### Excel und Anwendung schließen ###
        Excel1.Workbooks.Close()
        Me.Close()
    End Sub

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber das kann es ja nicht sein
nein das ist es wirklich nicht...
Es gibt 2 Möglichkeiten:
Entweder du liest ein Buch oder du gehst in Excel machst das was du
willst und zeichnest es mit dem Makrorekorder auf. Dann hast du den
Code den du brauchst.

>Dim Wert As String = Excel1.Range("C5") ' * Hier ist der
>Fehler *
Range ist eine Klasse, du hast bis jetzt nichts getan um eine
Objektinstanz davon zu erzeugen, also wundere dich nicht das du darauf
auch nicht zugreifen kannst.

Autor: Tarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Es gibt 2 Möglichkeiten:
>Entweder du liest ein Buch oder du gehst in Excel machst das was du
>willst und zeichnest es mit dem Makrorekorder auf. Dann hast du den
>Code den du brauchst.

Genau da liegt mein Problem: Ich muss noch diese Woche fertig werden
und habe daher keine Zeit noch fröhlich in einem Buch zu schmökern.

>Range ist eine Klasse, du hast bis jetzt nichts getan um eine
>Objektinstanz davon zu erzeugen, also wundere dich nicht das du
darauf
>auch nicht zugreifen kannst.

Und wie kann ich eine Objektinstanz davon erzeugen und auf den Inhalt
der Zelle zugreifen? Denn deine Antwort ist so nicht wirklich
hilfreich.  (ich soll das Projekt noch diese Woche fertig bekommen und
habe daher keine Zeit noch mal fröhlich ein Buch zu kaufen und
ausführlich darin zu schmökern)

Autor: Tarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, kann man Beiträge hier auch editieren ?!

Autor: Tarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, wenn ich folgendes mache

Label2.Text = Excel1.Range("C1").Value

dann zeigt er mir den korrekten Wert im Label an. Allerdings
funktioniert es so nicht:

Dim Wert As String = Excel1.Range("C5").Value
MessageBox.Show(Wert, "Inhalt der Zelle")

Was muss ich ändern, damit mir die MessagBox den Wert übernimmt?

Autor: Tarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon gut.

Dim Wert As String = Excel1.Range("C1").Value
MessageBox.Show(Wert, "Inhalt der Zelle")

funktioniert doch. Ich hatte bloß die falsche Zelle angegeben (eine
ohne Inhalt). kopfklatsch

Naja, Dummheit ist auch eine natürliche Begabung...

Autor: Tarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähm, eine Sache wäre da noch: Nehmen wir mal an, die Daten die ich haben
will liegen nun nicht in Tabellenblatt1. Wie komme ich da ran?

Autor: Tarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey, warum poste ich hier eigentlich? Nur um meine eigenen Texte zu
lesen? Scheint so, denn auch für das Wechseln des Tabellenblattes habe
ich die Lösung nun selbst gefunden (das man hier als Gast nicht
editieren kann stört ganz schön). Egal.

--> Excel1.Sheets("Tabelle2").Select()

Mein letztes Problem ist aber, dass er Excel nicht richtig beendet. Ich
mache das folgendermaßen:

' ### Excel und Anwendung schließen ###
Excel1.ActiveWorkbook.Close()
Excel1.Workbooks.Close()
Excel1.Application.Quit()

Allerdings behält er Excel in der Liste der Anwendungen, wenn man
schnell hintereinander auf die Datei zugreift. Versucht man es dann
wieder, bekommt man die nette Meldung, dass die Datei geöffnet ist und
man nur schreibgeschützte darauf zugreifen kann.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist schön deinen Gedankengängen zu folgen... ;-)

>Excel1.ActiveWorkbook.Close()
>Excel1.Workbooks.Close()
>Excel1.Application.Quit()

Du hast die Applikation zwar geschlossen , aber hast in VB das Objekt
noch nicht freigegeben , solange du dies nicht tust bleibt excel im
Speicher.

Nur als Anmerkung:
Wenn du eine Datei aufmachst bekommst du ein neues Workbook das dein
ActiveWorkbook wird. Dieses besteht aus Worksheets. und auf jedem
Worksheet kannst du arbeiten z.b. ein Range machen.
Es wäre sauberer, das was du tust über das Activeworkbook zu tun,
besonders da du es am Ende wieder schließt.

Autor: Tarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Es wäre sauberer, das was du tust über das Activeworkbook zu tun,
>besonders da du es am Ende wieder schließt.

Wärst du so nett, mir das als Beispielcode zu posten?

' ### Excel-Dokument öffnen ###
Dim Excel1 As New Excel.Application
Excel1.Workbooks.Open(Quellpfad)
Excel1.Sheets("Tabelle2").Select()
Excel1.Visible = False

' ### Datenoperationen ###
' Meine Operationen

' ### Excel und Anwendung schließen ###
Excel1.ActiveWorkbook.Close()
Excel1.Workbooks.Close()
Excel1.Visible = False
Excel1.Application.Quit()

Autor: Tarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meinst du so?

' ### Excel-Dokument öffnen ###
Dim Excel1 As New Excel.Application
Excel1.ActiveWorkbook.Open(Quellpfad)
Excel1.Sheets("Tabelle2").Select()
Excel1.Visible = False

' ### Datenoperationen ###
' Meine Operationen

' ### Excel und Anwendung schließen ###
Excel1.ActiveWorkbook.Close()
Excel1.Visible = False
Excel1.Application.Quit()

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Excel1.ActiveWorkbook.sheets...
oder
Excel1.ActiveWorkbook.Worksheets...
bei sheets bekommst du noch zusätzlich die Diagrammblätter

beide sollte dir den gleichen zugriff erlauben, du machst halt nur
sichtbar das du die ganze Zeit mit dem ActiveWorkbook arbeitest.
Das gibt einen saubereren und besser lesbaren Code.

Autor: Tarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, nochmal genaueres zu meinem Problem:
Ich starte mein Programm und drücke den Button "Auslesen" (der Code
unter ist dort hinterlegt). Er zeigt mir den Wert an und im
Task-Manager von Windows erscheint Excel. Allerdings bleibt es auch
dort, obwohl laut Code ja die Applikation wieder beendet werden soll.
Drückt man jetzt nochmal auf den Button, hat man Excel in der Taskliste
zwei Mal stehen usw. Erst beim Schließen meines Programms verschwinden
Excel wieder aus der Liste.

Habe jetzt folgendes gemacht:

Try
   ' ### Excel-Dokument öffnen ###
   Dim Excel1 As New Excel.Application
   Excel1.ActiveWorkbook.Open(Quellpfad)
   Excel1.ActiveWorkbook.Sheets("Tabelle2").Select()
   Excel1.ActiveWorkbook.Visible = False

   ' ### Datenoperationen ###
   ' bla

   ' ### Excel und Anwendung schließen ###
   Excel1.ActiveWorkbook.Close()
   Excel1.Application.Quit()
Catch ex As Exception
   MessageBox.Show(ex.Message, "Fehler")
End Try

Allerdings wird dann die Exception ausgelöst: "Objektvariable oder
WithBlock-Variable wurde nicht festgelegt"

------------------
Anderes Problem:
Ich möchte, dass er mir automatisch alle Zellen mit Inhalt ausliest.
Die Spaltenzahl ist festgelegt, aber die Zeilenzahl kann variieren. Mit
welchem Befehl kann ich denn die verwendeten Zeilen zählen lassen?

Versucht habe ich schon:
Dim Zeilenzahl As String = Excel1.Rows.Count()

Allerdings bekomme ich dann einen Wert um die 65000 (max. Zahl der
Zellen in Excel), es müssten aber drei sein.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  Excel1.Application.Quit()
danach wie schon gesagt Objekt freigeben
excel1=nothing
so war es zumindest in VB6
Danach ist Excel1 ungültig

>Catch ex As Exception
>   MessageBox.Show(ex.Message, "Fehler")
>End Try
>Allerdings wird dann die Exception ausgelöst: "Objektvariable oder
>WithBlock-Variable wurde nicht festgelegt"
d.h. irgendwo in deinem tryblock hat es gekracht, kannst du das mal
eingrenzen?
>Excel1.ActiveWorkbook.Open(Quellpfad)
Das Open solltest du aber nicht mit dem Activeworkbook machen, das wird
erst nach dem Open dein Activeworkbook!
Wenn du schon kein Buch lesen willst dann lies wenigstens ein bisschen
in der MSDN.
Arbeiten mit Microsoft Excel Objekten wäre da ein passender Artikel.

Autor: Tarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe jetzt mal etwas mit dem Auskommentieren probiert: Der Fehler tritt
in dem Moment auf, in dem ich irgendwo "ActiveWorkbook." mit
reinschreibe. Keine Ahnung wieso.

Das "Mulitples-Excel"-Problem besteht auch dann, wenn ich "Open"
ohne das "ActiveWorkbook" mache und wenn ich am Ende "Excel1 =
Nothing" schreibe.

------------------
Zu meinem anderen Problem:
Fällt dir dazu noch was ein?

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Zu meinem anderen Problem:
>Fällt dir dazu noch was ein?

Usedrange

Sag mal schaust du überhaupt in die MSDN?
Activeworkbook setzt voraus, dass dein Workbook das aktive ist.
Die Methode mit dem Makrorekorder bringt einen schnell vorwärts,
ersetzt aber nicht das Lesen eines Buches oder der MSDN. Sonst kommt da
zusammengeschusterter Code raus der bei dir funktioniert, aber wenn
Excel noch was anderes aufhat geht es voll vor den Baum.
Die Zusammenhänge von Workbook, Worksheet und Range sind sind wichtig
für die Programmierung mit Excel.

Autor: Tarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Sag mal schaust du überhaupt in die MSDN?

Ja, das tue ich:
http://msdn.microsoft.com/library/deu/default.asp?...

Da gibt es einen Unterabschnitt genau über das Thema "Usedrange"...
theoretisch zumindest. Denn beim Aufruf dieser Seite erhält man nur
einen Server-Fehler. indieEckesetzundheul
Scheinbar hat irgend jemand was dagegen, dass ich dieses Projekt
beende.
Hast du zufällig noch nen anderen Link, wo ich mir dieses Thema zu
Gemüte führen könnte?

----------
Das mit dem Beenden von Excel scheint aber an meinem Computer zu
liegen. Nach ca. drei Minuten fängt er an (fast) alle Excel-Anwendungen
aus der Task-Liste zu schmeißen. Es scheint also doch mehr oder weniger
zu funktionieren.

Autor: Tarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch eine Anmerkung:
Dim Endwert As String = Excel1.Sheets("Tabelle1").Usedrange.Count

funktioniert. Allerdings zählt er den gesamten verwendeten Bereich,
nicht die verwendeten Zeilen (was der Wert wäre, den ich benötige). Da
ich die Spaltenzahl kenne, kann ich notfalls die Zeilenzahl daraus
errechnen, aber gibt es da nicht eine elegantere Lösung?

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>*indieEckesetzundheul*
Ich finde es schon etwas verwunderlich das man Projekte schreibt ohne
die MSDN zu Hause zu haben. Wenn ein Link nicht funktioniert gibt es
immer noch die VBA Hilfe von Excel. Also mach den Teppich nicht so
nass... ;-)

Usedrange gibt ein Rangeobjekt zurück und das gibt dir auch
Eigenschaften wie Columns und Rows zurück.

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß ja nicht ob du dein Problem inzwischen gelöst hast, aber...
Wenn du dt als DataTable deklarierst in dem die Excel-Tabelle drin ist,
sieht der Code eigentlich so aus:

For i as Integer = 0 to dt.rows.count - 1

   Me.BindingContext.Item(dt).Position += 1

Next

MessageBox.Show("Es sind " & i & " Zeilen in ihrer Arbeitsmappe.")

Autor: Tarek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Hinweis, aber von den Datatables bin ich inzwischen
komplett weg, weil ich deren Handhabung nicht hinbekommen habe.

Momentan kümmere ich mich nur noch um das lästige Debugging...

Autor: 37Jahre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
so ein schöner Thread für Anfänger, vielen Dank, habe zum Thema mir 
schon Stunden mit google verbracht.
Das galileo-openbook/vb_net bringt mir zB. gar nichts: 
http://www.galileocomputing.de/openbook/vb_net/msv...
ich muß nochmals neu anfangen:
Code:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button3.Click
Dim Excel1 As New Excel.Application
Excel1.Workbooks.Open("C:\excel.xls")
Excel1.Visible = True

'deine Operationen (z.B. Excel1.Range("A2").Select()
Excel1.Range("C1").Value = messwertA ' mein Bsp.

Excel1.ActiveWorkbook.Close()
Excel1.Workbooks.Close()
Excel1.Visible = False

End Sub
--------------------------
Mir ist nicht klar, warum bei jedem BuutonClick eine neue Exceldatei 
erzeugt wird? Ich will immer den Wert in Excel1.Range("C1") 
überschreiben.

Wie kann ich einfach in eine geöffnete Excelmappe zB. in Range("C1") 
meine Messwerte nacheinader rein(über)schreiben?

Ich habe das teure (50.-EUR) Buch Excel-Programmierung, aber die dortige 
Beschreibung auf Seite 80, "Der Zugriff auf geöffnete Arbeitmappen kann 
über drei unterschiedliche Eigenschaften erfolgen...", bringt mir leider 
nichts!
Z.B. steht dort: ActiveWorkbook ist die Arbeitsmappe, die momentan aktiv 
ist.
Ja schön! Aber was soll ich in meinen Code schreiben?

Danke

Autor: 37Jahre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entschuldigung!

Code:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
Dim Excel1 As New Excel.Application
Excel1.Workbooks.Open("C:\excel.xls")
Excel1.Visible = True

'deine Operationen (z.B. Excel1.Range("A2").Select()
Excel1.Range("C1").Value = messwertA ' mein Bsp.

' Diesen Teil habe ich auskommentiert, ActiveWorkbook soll offen bleiben
'Excel1.ActiveWorkbook.Close()
'Excel1.Workbooks.Close()
'Excel1.Visible = False

End Sub
--------------------------

Autor: 37Jahre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sollte doch zB. funktionieren?

Excel1.Workbooks("Mappe1").Activate()

Geöffnete Mappe ist Mappe1.

Autor: 37Jahre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier hat es noch ein super einfaches Bsp.:
http://support.microsoft.com/kb/306022/de

        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object

        'Start a new workbook in Excel.
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add

        'Add data to cells of the first worksheet in the new workbook.
        oSheet = oBook.Worksheets(1)
        oSheet.Range("A1").Value = "Last Name"
        oSheet.Range("B1").Value = "First Name"
        oSheet.Range("A1:B1").Font.Bold = True
        oSheet.Range("A2").Value = "Doe"
        oSheet.Range("B2").Value = "John"

        'Save the Workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book1.xls")
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()

Aber ich komme immer noch nicht drauf, wie ich das Workbook offen lassen 
könnte, um dann zB. die Namen, "Doe" u. "John" in  Range("A2") 
Range("B2") zu überschreiben.
Kann da jemand einen Tip geben?
Danke

Autor: Manage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls der Endkunde nicht die selbige Excel Version wie Du auf Deiner 
Entwicklerkiste hat.

Dim MyConnection As System.Data.OleDb.OleDbConnection
Dim myPath As String = "Path of the File"
Try
''''''' Fetch Data from Excel
Dim DtSet As System.Data.DataSet
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
MyConnection = New 
System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; 
data source='" & myPath & " '; " & "Extended Properties=Excel 8.0;")
' Select the data from Sheet of the workbook.
MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from 
[sheet1$]", MyConnection)
DtSet = New System.Data.DataSet
MyCommand.Fill(DtSet)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
dgViewSample.DataSource = DtSet
dgViewSample.DataBind()
MyConnection.Close()
Catch ex As Exception
Dim er As String
MyConnection.Close()


lese ich die Daten lieber direkt.


Gruss
Manage

Autor: grumble (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey manage,

das ist ja ne sau coole loesung :)

danke dir...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.