# Excel datei in Visual basic öffnen und inhalt anzeigen



## DerRiese (20. Juli 2005)

moinsen

ich hab mir folgendes zusammengeschustert

Private Sub Demo_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        MsgBox("Willkommen, auf OK klicken für Weiter", , "")
        Dim x As String
        Dim i As Integer
        x = ""
        Dim objExcelApp As Excel.Application
        Dim objWorkbooks As Excel.Workbooks
        Dim objSheet As Excel.Worksheet
        Dim nQuartal As Integer

        objExcelApp = CreateObject("Excel.Application")
        objWorkbooks = objExcelApp.Workbooks
        objWorkbooks.Open("C:\testfile.xls")
        objSheet = objWorkbooks.Item(1).Worksheets(1)

        i = 1
        While x <> ""
            x = objSheet.Range("A" & CStr(i)).Value
            MsgBox("wert von x:" & x, MsgBoxStyle.MsgBoxHelp)
            objSheet.SaveAs("C:\Testausgabe.xls")
            objExcelApp.Visible = True
            ListBox1.BeginUpdate()
            ListBox1.Items.Add(x)
            ListBox1.EndUpdate()
            i = i + 1

        End While
        objWorkbooks.Close()



    End Sub

das programm soll mir also ein excel file öffnen und den inhalt aus der ersten spalte in einer listbox anzeigen (die erste spalte enthält dezimalzahlen). nur in der version klappt das nicht so ganz.... er öffnet zwar im hintergund excel aber zeigt mir die zellinhalte nicht an. kann mir da jemand helfen?

des weiteren brauch ich noch irgendwie ne idee wie ich dann die ausgewählte zeile in der List box in ein paar txt-boxen anzeigen lassen kann...


danke


----------



## herberta (5. August 2005)

Hallo Riese, 

 das ist eigentlich recht einfach. Zum einen reicht es völlig, wenn Du ein Objekt als Excel-Applikation (z.B. xlapp) definierst. Du kanns dann über xlapp.workbook.open usw. Dir die Datei auf den Bildschirm holen. Du musst aber vorher unter "Projekt/Verweise" eine Microsoft Excel.DLL einbinden.

   Also
   dim xlapp as excel.application
   set xlapp = new excel.application
   xlapp.application.visible = true  ' wichtig
 [xlapp.application.ignoreRemoteRequests = true ' wenn Du vermeiden willst, dass Du aus versehen beim Doppelklick auf eine andere Datei in dieses Objekt springst. Achtung , nach der Verarbeitung muss du dass wieder auf false setzen, weil du sonst jede Excel-datei explizit über den Datei/öffnen dialog öffnen musst. ]

 xlapp.workbooks.open (Pfad glaube ich, einfach ein bischen damit rumexperimentieren. In der Regel kannst Du Dir einfach ein Excelmacro aufzeichnen und den Code 1 zu1 nach VB übernehmen. Vor jeden Aufruf [z.B. Range("A1") muss xlapp.Range("A1") heißen] schreibst Du dann noch "xlapp", damit die Anwendung nicht durcheinander kommt.

   Dann kannst Du mit so einer Funktion

   ***********************  ANFANG  *********************************
  dim anzahlZeilen as long
  anzahlZeilen = Zeilenzahl(xlapp)

   Private Function ZeilenZahl(ByRef xlApplik As Excel.Application) As Long

   Dim z1, z2 As Long
   Dim i As Integer

   On Error GoTo ERR1
   z1 = 0
   z2 = 0
   For i = 65 To 76        '65 bis 76 sind die ASCII-Codes für die Buchstaben A-K
       z2 = xlApplik.Range(Chr(i) & Rows.Count).End(xlUp).Row
       If z2 > z1 Then
           z1 = z2
       End If
   Next i
   ZeilenZahl = z1
   Exit Function
   ERR1:
   ZeilenZahl = -1
   End Function

   ********************************************************************************
 Zur Info: Dieser Code "xlApplik.Range(Chr(i) & Rows.Count).End(xlUp).Row" sucht nach dem letzten Eintrag in Deiner Exceltabelle. Wenn Du nur in Spalte A suchst, dann kannst Du auch "xlApplik.Range("A" & Rows.Count).End(xlUp).Row" nutzen. CHR(i) wandelt den ASCII-Code in einen Wert um, hier A bis K

   ****************************** ENDE *****************************************


 die Anzahl der Zeilen in Deiner Exceltabelle ermitteln und über eine einfache Schleife "for i = 1 to anzahlZeilen" den xlapp.Range("A" & cstr(i)).value auslesen. 

   Der Rest sollte easy sein.
   Ich hoffe das war die richtige Antwort. Viel Spaß


----------

