Benutzer mit den meisten Antworten
per Visual Basic 2013 beliebige Zellen aus Excel datei auslesen, anzeigen, und in eine neue excel Datei speichern

Frage
-
Hallo
für mein Problem und zum lernen würde ich mir folgendes wünschen:
Form1, 4 Buttons, 3 TextBoxen alles ohne neue Namen
in der Form1, Variablen, wo und wie benennen
muss noch was externes mit eigfügt werden, wo und wie
Button1
eine Excel Datei öffnen z.B. D:\Projekt\neue_daten.xlsx
3 beliebige Zellen auslsen, und per TextBox 1,2,3 anzeigen
Button2
nochmal 3 beliebige Zellen aus lesen und in die vorhandene Datei test.xlsx in beliebige Zellen schreiben
muss diese Datei vorher auch geöffnet werden
Button3
die 3 Werte aus den TextBoxen auch nach test.xlsx screiben
Botton4
Dateiei/n schliessen
Programm beenden
Ich denke wenn mir das einer als Test und Lerngrundlage machen würde
käme ich gut weiter. Das was dazwichen passiert bekomme ich ich wahrscheinlich hin.
Vielen Dank im voraus, ein alter Knacker der sich freuen würde
- Typ geändert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 22. August 2017 05:54 Eine Frage ist erkennbar
Antworten
-
Hi,
hier mal eine Demo, wie man das machen könnte:Imports System.ComponentModel Imports Microsoft.Office.Interop Public Class Form1 Private WithEvents btn1 As New Button With {.Text = "Excel Datei öffnen", .Dock = DockStyle.Top} Private WithEvents btn2 As New Button With {.Text = "3 beliebige Zellen", .Dock = DockStyle.Top} Private WithEvents btn3 As New Button With {.Text = "3 Werte schreiben", .Dock = DockStyle.Top} Private WithEvents btn4 As New Button With {.Text = "schließen und beenden", .Dock = DockStyle.Top} Private tb1 As New TextBox With {.Dock = DockStyle.Top} Private tb2 As New TextBox With {.Dock = DockStyle.Top} Private tb3 As New TextBox With {.Dock = DockStyle.Top} Private inpFile As String = "c:\temp\neue_daten.xlsx" Private outFile As String = "c:\temp\test.xlsx" Private xlApp1 As Excel.Application Private xlApp2 As Excel.Application Private xlWb1 As Excel.Workbook Private xlWb2 As Excel.Workbook Private rnd As New Random Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Controls.AddRange(New Control() {tb3, tb2, tb1, btn4, btn3, btn2, btn1}) End Sub Private Sub btn1_Click(sender As Object, e As EventArgs) Handles btn1.Click Try If xlApp1 Is Nothing Then xlApp1 = New Excel.Application xlWb1 = xlApp1.Workbooks.Open(inpFile) tb1.Text = GetCellValue(xlWb1) tb2.Text = GetCellValue(xlWb1) tb3.Text = GetCellValue(xlWb1) Catch ex As Exception MsgBox(ex.Message) End Try End Sub Private Sub btn2_Click(sender As Object, e As EventArgs) Handles btn2.Click If xlApp2 Is Nothing Then xlApp2 = New Excel.Application If xlWb1 Is Nothing Then Exit Sub xlWb2 = xlApp2.Workbooks.Add SetCellValue(xlWb2, GetCellValue(xlWb1)) SetCellValue(xlWb2, GetCellValue(xlWb1)) SetCellValue(xlWb2, GetCellValue(xlWb1)) End Sub Private Sub btn3_Click(sender As Object, e As EventArgs) Handles btn3.Click If xlApp2 Is Nothing Then Exit Sub If xlWb2 Is Nothing Then Exit Sub SetCellValue(xlWb2, tb1.Text) SetCellValue(xlWb2, tb2.Text) SetCellValue(xlWb2, tb3.Text) End Sub Private Sub btn4_Click(sender As Object, e As EventArgs) Handles btn4.Click SaveAndClose() End Sub Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing SaveAndClose() End Sub Private Sub SaveAndClose() If xlWb1 IsNot Nothing Then xlWb1.Close() If xlApp1 IsNot Nothing Then xlApp1.Quit() If xlWb2 IsNot Nothing Then xlWb2.SaveAs(outFile) xlWb2.Saved = True xlWb2.Close() End If If xlApp2 IsNot Nothing Then xlApp2.Quit() End Sub Private Function GetCellValue(wb As Excel.Workbook) As String Dim xlSheet As Excel.Worksheet = CType(wb.Worksheets(1), Excel.Worksheet) Dim item As Excel.Range = CType(xlSheet.Cells.Item(rnd.Next(1, 10), rnd.Next(1, 10)), Excel.Range) Return item.Value.ToString End Function Private Sub SetCellValue(wb As Excel.Workbook, value As String) Dim xlSheet As Excel.Worksheet = CType(wb.Worksheets(1), Excel.Worksheet) Dim item As Excel.Range = CType(xlSheet.Cells.Item(rnd.Next(1, 10), rnd.Next(1, 10)), Excel.Range) item.Value = value End Sub End Class
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 28. August 2017 10:45
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 4. September 2017 12:43
Alle Antworten
-
Hi,
hier mal eine Demo, wie man das machen könnte:Imports System.ComponentModel Imports Microsoft.Office.Interop Public Class Form1 Private WithEvents btn1 As New Button With {.Text = "Excel Datei öffnen", .Dock = DockStyle.Top} Private WithEvents btn2 As New Button With {.Text = "3 beliebige Zellen", .Dock = DockStyle.Top} Private WithEvents btn3 As New Button With {.Text = "3 Werte schreiben", .Dock = DockStyle.Top} Private WithEvents btn4 As New Button With {.Text = "schließen und beenden", .Dock = DockStyle.Top} Private tb1 As New TextBox With {.Dock = DockStyle.Top} Private tb2 As New TextBox With {.Dock = DockStyle.Top} Private tb3 As New TextBox With {.Dock = DockStyle.Top} Private inpFile As String = "c:\temp\neue_daten.xlsx" Private outFile As String = "c:\temp\test.xlsx" Private xlApp1 As Excel.Application Private xlApp2 As Excel.Application Private xlWb1 As Excel.Workbook Private xlWb2 As Excel.Workbook Private rnd As New Random Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Controls.AddRange(New Control() {tb3, tb2, tb1, btn4, btn3, btn2, btn1}) End Sub Private Sub btn1_Click(sender As Object, e As EventArgs) Handles btn1.Click Try If xlApp1 Is Nothing Then xlApp1 = New Excel.Application xlWb1 = xlApp1.Workbooks.Open(inpFile) tb1.Text = GetCellValue(xlWb1) tb2.Text = GetCellValue(xlWb1) tb3.Text = GetCellValue(xlWb1) Catch ex As Exception MsgBox(ex.Message) End Try End Sub Private Sub btn2_Click(sender As Object, e As EventArgs) Handles btn2.Click If xlApp2 Is Nothing Then xlApp2 = New Excel.Application If xlWb1 Is Nothing Then Exit Sub xlWb2 = xlApp2.Workbooks.Add SetCellValue(xlWb2, GetCellValue(xlWb1)) SetCellValue(xlWb2, GetCellValue(xlWb1)) SetCellValue(xlWb2, GetCellValue(xlWb1)) End Sub Private Sub btn3_Click(sender As Object, e As EventArgs) Handles btn3.Click If xlApp2 Is Nothing Then Exit Sub If xlWb2 Is Nothing Then Exit Sub SetCellValue(xlWb2, tb1.Text) SetCellValue(xlWb2, tb2.Text) SetCellValue(xlWb2, tb3.Text) End Sub Private Sub btn4_Click(sender As Object, e As EventArgs) Handles btn4.Click SaveAndClose() End Sub Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing SaveAndClose() End Sub Private Sub SaveAndClose() If xlWb1 IsNot Nothing Then xlWb1.Close() If xlApp1 IsNot Nothing Then xlApp1.Quit() If xlWb2 IsNot Nothing Then xlWb2.SaveAs(outFile) xlWb2.Saved = True xlWb2.Close() End If If xlApp2 IsNot Nothing Then xlApp2.Quit() End Sub Private Function GetCellValue(wb As Excel.Workbook) As String Dim xlSheet As Excel.Worksheet = CType(wb.Worksheets(1), Excel.Worksheet) Dim item As Excel.Range = CType(xlSheet.Cells.Item(rnd.Next(1, 10), rnd.Next(1, 10)), Excel.Range) Return item.Value.ToString End Function Private Sub SetCellValue(wb As Excel.Workbook, value As String) Dim xlSheet As Excel.Worksheet = CType(wb.Worksheets(1), Excel.Worksheet) Dim item As Excel.Range = CType(xlSheet.Cells.Item(rnd.Next(1, 10), rnd.Next(1, 10)), Excel.Range) item.Value = value End Sub End Class
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 28. August 2017 10:45
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 4. September 2017 12:43
-
Hallo
Erstmal vielen Dank für die promte Antwort. Leider ist das Beispiel, für meinen jetzigen Wissensstand
noch komplex. Es würde mir mehr helfen, wenn der Anfangszustand tatsächlich einfach nur eine Form1 ist
in die ich die Bottons und die TextBoxen ziehe und die Eigenschaften unangetastet bleiben. Die Datenzellen
die ich in meinem Project auslesen und schreiben will sind weniger als 50 Zellen. Mir würde es vom
verständnis her leichter fallen wenn im Beispiel die Zellen per A1, B4,D11 u.s.w. angesprochen würden.
Nochmal zu Deinem Beispiel, ich habe mir den Code natürlich eingehend angeschaut. Gerade die Auswahl
der Zellen verstehe ich nicht richtig, und wenn ich es testen möchte muss ich doch wahrscheinlich Buttons
und Textfelder anpassen. Würde es Dir was ausmachen nochmal in die Tasten zu hauen ?
Ich werde mich aber heute Nachmittag sofort an den Rechner setzten und versuchen se zum laufen zu
bringen.
Nochmal Besten Dank
-
Hi,
im Code hatte ich alle Deine Wünsche eingebaut. Den Code kannst Du in eine Form1 kopieren und brauchst nichts weiter zu machen. Er ist incl. Erstellen der Steuerelemente vollständig. Da brauchst Du keine Steuerelemente auf die Form ziehen. Das würde nur alles noch verkomplizieren. Es ist lediglich zusätzlich die PIA über Nuget hinzuzufügen (Microsoft.Office.Interop.Excel).Im Code arbeitest Du mit dem Excel-Objectmodel. Der Zugriff auf eine Zelle geht über Zeile und Spalte. Wenn Du mit A1 usw. arbeiten willst, dann solltest Du Dir eine entsprechende Konvertierungsroutine bauen bzw. mal in der Hilfe suchen, ob es da eine andere Zugriffsmöglichkeit gibt.
In Meinem Beispiel werden die Zellen zufällig ausgewählt (über Random), so, wie Du es gefordert hattest.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks -
Hallo
Säter Nachmittag und ich bräuchte schon wider Hilfe
Dein Beispiel läuft bei mir noch nicht. In vielen Zeilen werden Fehler angezeigt.
Es geht nur um die letzten Zeilen Public Class Form1 wo Excel drin vorkommt. Das zweit, was
ich nicht verstehe, was ist PIA über Nuget (Microsoft.Office.Interop.Excel)? Ich denke die Fehler haben wohl was damit zu tun. Ich finde aber nichts.
Kannst Du mir da nochmal weiterhelfen?
Vielen Dank
-
Hi,
sein Handwerkszeug sollte man schon etwas kennen:-)Hier mal ein paar Bilder:
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks