Excel Daten aufrufen und in VB übertragen sowie ändern.

  • VB.NET

Es gibt 54 Antworten in diesem Thema. Der letzte Beitrag () ist von Otti.

    Du musst einen absoluten Pfad angeben, dann funktioniert das auch.
    Wenn du nämlich den relativen Pfad nimmst, sucht er in dem "Wert" der in der Umgebungsvariable "Path" steht.
    Am schlausten ist es doch, wenn die Rechnungsdateien auch auf dem Stick sind, oder nicht?

    Sprich:

    --USB Stick
    --Anwendung.exe
    -----------Rechnungsdateien(Ordner)
    -------------------Rechnungen(.xlsx)

    oder nicht?
    Wenn du es von einem USB-Stick starten willst ist ein relativer Pfad ein MUSS!!!!!
    Ja keinen fixen Pfad hin hauen oO
    Der USB-Stick heißt schließlich nicht überall so wie auf deinem Rechner... Nur weil es bei dir E: ist musses ja nicht überall so sein!
    Also... Wenn du die Datei zB. in nen "Dokumente" Ordner, welcher auf gleicher Ebene wie deine Exe liegt, schiebst...
    Dann könntest du erst einmal den Pfad der Exe herausfinden.
    Zb. via Application.Info.DirectoryPath
    Anschließend wüsstest du... da drin liegt der Ordner Dokumente in welchem wiederum deine Datei liegt...
    diese verbindest du mit Path.Combine!
    Und schon hast du nen pfad.
    Ins unsaubere geschrieben:

    VB.NET-Quellcode

    1. Dim Pfad As String = System.IO.Path.Combine(Application.Info.DirectoryPath, "Dokumente\Rechnungen.xlsx")

    Wenn du System.IO schon importiert hast, kannst das natürlich weg lassen.

    @OMA Wieso deine Zusammenstellung für mich unschön ist?
    Man verbinden Pfade NICHT mit &! Man nutzt Path.Combine. Zudem ist es bisl wirsch so komplex den Pfad der Datei zu ermitteln.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Für wie Doof hälst du mich?

    1. Wie ich auf den Pfad gekommen bin, in meinem 1. Post, ist die Variante die halt nur mit FW 2.0 möglich ist.
    Ab 3.5 gibt es dann Application.StartupPath.

    2. Natürlich meine ich keinen "Absoluten" Pfad im Sinne von "E:\Rechnungen" sondern, mit den Methoden, die das Framework liefert.
    Im Prinzip hast du nur meinen Ansatz von Seite 2 hier noch einmal reingepostet.
    (Abgesehen von dem Path.Combine)
    Pfad bzw. Strings sind ohne Probleme mit einem & - Zeichen kombinierbar, was man aber NICHT machen sollte ist, sie zu addieren (+) auch wenn es bei VB geht.

    & - OK
    + - NoGo

    Comprender?
    @OMA du solltest erst lernen was der Unterschied zu einem absoluten und relativen Pfad ist bevor du die Wörter so extrem falsch verwendest! Und dich nicht darüber aufregen, ob dich wer für "Doof häl(s)t".
    Und ein & in Pfaden IST ein Nogo! Es ist zum Verbinden von Strings und nicht von Pfaden!
    Auch wenn es geht... man sollte es lassen.

    PS: Deine Schreibweise ist leider nicht sachlich, extrem fehlerbehaftet und wirkt für mich demnach nicht wie die, die man ernst nehmen sollte. Demnach würde ich dem TE dringend abraten dem zu folgen. (Ist aber meine dem "Comprender" usw. geschuldete eigene Meinung)
    Und nun BTT.

    Spoiler anzeigen
    Exkurs relativ und absolut
    Beim absoluten Pfad wird die komplette Adresse einer Datei (oder auch Internetseite) angegeben.
    Beim relativen Pfad wird nur die Adresse in Bezug auf den "Standort" angegeben. Wenn du also zum Beispiel bereits auf Domainname (sozusagen dein Standort) bist, ist die relative Adresse zu dem Beispiel ../bilder/beispiel

    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Warum haut ihr euch hier eigentlich die Köpfe ein, anstatt friedlich den gemeinsamen Konsens zu finden?

    Absolute Pfade sind mit Angabe einer eindeutigen Wurzel, also angefangen mit z.B. C:\ oder \\SERVER\
    Ob die Pfadangaben zur Laufzeit erzeugt werden oder hartcodiert im Programm stehen, ist dabei völlig belanglos.

    Im konkreten Fall ist die optimale Lösung, zur Laufzeit einen absoluten Pfad zu erzeugen, der relativ zur ausgeführten Anwendung liegt.
    Und nichts anderes habt ihr beide mit euren Ausführungen beschrieben.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo zusammen...

    Habe nun eure Vorschläge eingebunden...
    Die Datei wird nun gefunden, allerdings habe ich noch einen falschen verweis da die Datei nicht gespeichert wird...

    Quellcode

    1. If fi.Exists Then
    2. fi.Delete()
    3. xls_Appl.ActiveWorkbook.SaveAs(fi.FullName)


    soweit klar aber wieso will das Programm direkt auf den USB Stick zugreifen ??

    Quellcode

    1. fi = New System.IO.FileInfo(Path.Combine("\", DateiName))


    Es ist doch keine Angabe sondern nur \ ????
    Was habe ich denn da für einen Gedankenfehler ???
    Wenn dein Anwendungspfad auf dem USB-Stick liegt, ist "\" die Root des Sticks.

    Um dir weiterhelfen zu können, solltest du vielleicht die Fragen aus Post #36 beantworten.
    Womöglich hast du dir (nach Überlegung) die Fragen damit sogar schon selbst beantwortet.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod

    Hallo
    Ich Grüsse dich
    Habe mir mal Gedanken darüber gemacht was du geschrieben hast allerdings komm ich da nicht weiter...

    Ich starte das Programm aus dem \Debug Ordner und dort drunter befinden sich auch die Unterordner von mir.

    Kannst du mir bitte noch einen Ratschlag geben, bin mittlerweile echt am ende... :(
    Bilder
    • Unbenannt.PNG

      34,25 kB, 715×329, 117 mal angesehen
    Lass uns doch nicht Rätselraten.

    Wie heisst der komplette Pfad der EXE?
    Wie heisst der komplette Pfad, auf dem du abspeichern willst?
    Wie rufst du das Programm auf? Aus der IDE? Aus einer CMD-Umgebung? Mit Doppelklick?

    Eigentlich müsstest du ja nur im Debugger mal nachschauen, was in den einzelnen Variablen so drin steht, dann würde es dir selbst klar werden.
    Solange wir deine Umgebung nicht kennen, stochern wir lediglich im Nebel.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod

    Also das Programm soll vom USB Stick abgespielt werden und die neuen erstellen Dateien dort auch gespeichert werden.
    Die .exe zum Programm starten hat folgenden Pfad: USBStick:\KGV\bin\Debug\Start.exe
    Der Speicherort: USBStick:\KGV\bin\Debug\Rechnungsdatei\
    Das Programm ist komplett über den USBStick zustarten, das Programm liegt nicht auf der Festplatte

    Danke dir für deine Unterstützung
    @petaod

    Hallo

    Brainfuck-Quellcode

    1. Dim fi As System.IO.FileInfo
    2. Dim DateiName As String = String.Concat("\Einzelgärten\" & Tgartennr.Text & " " & Tvorname.Text & " " & Tnachname.Text & "\ ", "Rechnung", " ", TRjahr.Text, "-", Tgartennr.Text, " ", Tvorname.Text, " ", Tnachname.Text, ".xlsx")
    3. fi = New System.IO.FileInfo(Path.Combine("\", DateiName))
    4. xls_appl............................blabla....
    5. If fi.Exists Then
    6. fi.Delete()
    7. xls_Appl.ActiveWorkbook.SaveAs(fi.FullName)
    8. Else
    9. xls_Appl.ActiveWorkbook.SaveAs(fi.FullName)
    10. End If
    11. xls_Appl.ActiveWorkbook.Close(False)
    12. xls_Appl.Quit()


    wie schon beschrieben macht er beim speichern die Probleme da er den pfad nicht findet auf dem usb stick.
    Dein Pfad beginnt mit "\".
    Das ist die Root, also direkt auf dem Basisverzeichnis.
    Wenn du das relativ zum Arbeitsverzeichnis haben willst, musst du den ersten Backslash weglassen.

    Und mit dem Path.Combine hängst du nochmals die Root vorne dran.
    Doppelt hält besser ;)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --