Probleme mit Vb und Excel

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Probleme mit Vb und Excel

    Guten Morgen, Abend , Tag ihr dürft euch etwas aussuchen

    Ich habe ein kleines aber seltsames Problem mit Excel bei dem hier hoffentlich jemand helfen kann.
    Folgende Ausgangssituation habe ich.

    Mein Server bekommt täglich eine ExcelDatei an der ich keinerlei Änderung vornehmen kann. Der Aufbau ist immer der Selbe nur variiert die Zeilenanzahl

    Quellcode

    1. Controll Rep. Special Case Status 19/05/2015
    2. U11223 Closed Updated 1
    3. U11224 Call Out Closed 1
    4. U22312 Closed Waiting Response From Customer 4
    5. ...
    6. ...


    Mit folgendem Code greife ich aus Vb auf meine ExcelDatei zu

    VB.NET-Quellcode

    1. Dim _ds As New DataSet
    2. Dim _path as string = "C:\TEMP\closed_Casses.xls"
    3. Dim _exlConnString as String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _path & ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=0"""
    4. Dim _myData As New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [Sheet1$]", _exlConnString)
    5. Try
    6. If _myData.Fill(_ds) = 0 Then <-------- Hier wurde bereits eine Zeile zu wenig importiert
    7. 'nothing to do
    8. Environment.Exit(0)
    9. End If
    10. Catch ex As Exception
    11. 'new Entry in DbError
    12. DbError.exMessage("no Excel Data available for import", GetCurrentMethod.Name, cAPPLICATION)
    13. Environment.Exit(1)
    14. End Try


    Hier kommen jetzt nun die Dinge die mir etwas seltsam erscheinen und auch meine Probleme an die ich stoße.
    - Wenn man die Datei geöffnet hat, während mein Programm darüber läuft, liest er jede Zeile ohne Probleme ein.
    - Hat man einmal die Datei geöffnet und speichert ohne Änderungen, lässt sie sich jedes mal ohne Probleme auslesen.
    - Ein anderer "workaround" Währe eine weitere Zeile mit einem Insert Befehl einzufügen. Dann macht mir aber der "." von "Controll Rep." Probleme. Eine Möglichkeit diese Zelle vorher zu ändern
    - Die Möglichkeit mit Workbooks aus "Imports Microsoft.Office.Interop.Excel" zu arbeiten. Gibt es auch nicht da kein Excel auf dem Server installiert ist

    Ich weiß nicht ob mir hier jemand weiter helfen kann.
    Falls dem doch so sein sollte, hat diese Person ein Stein bei mir im Brett.

    Gruß Balor

    Änderung
    If _myData.Fill(_ds) = 1 -> If _myData.Fill(_ds) = 0

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Balor“ ()

    Balor schrieb:

    beendet es sich
    Ja, das ist der Code.
    Allerdings beendet es sich auch, wenn ein Fehler auftritt.
    Wie unterscheidest Du diese beiden Sachverhalte?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi @Balor,
    folgendes:

    Balor schrieb:

    Hier kommen jetzt nun die Dinge die mir etwas seltsam erscheinen und auch meine Probleme an die ich stoße.

    1.) Was genau erscheint dir seltsam?
    2.)Was sind deine Probleme?

    Balor schrieb:

    Wenn man die Datei geöffnet hat, während mein Programm darüber läuft, liest er jede Zeile ohne Probleme ein.

    Na das ist doch erfreulich ;D

    Balor schrieb:

    Mein Server bekommt täglich eine ExcelDatei an der ich keinerlei Änderung vornehmen kann.

    Und wo willst du die dann bearbeiten?

    Balor schrieb:

    Mit folgendem Code greife ich aus Vb auf meine ExcelDatei zu

    Oder darf ich davon ausgehen :
    Quelle(iein PC) erstellt selber eine Excel Datei, die er dann an den Server(anderer PC/NAS/Webspace), die du dir via FTP ziehst und dann auf deinem PC weiter bearbeitest?

    Balor schrieb:

    Die Möglichkeit mit Workbooks aus "Imports Microsoft.Office.Interop.Excel" zu arbeiten

    Würde ich von abraten
    1.)Musst du da nen riesen Krampf an Try-Catch-Finally rumbauen, weil dir, wenn aus irgendeinen Grund n Fehler auftritt, dir eine Excel Instanz im RAM/als Prozess hängen bleibt. Die musst du dann aufwändig wieder beenden -> Is schwachsinn...
    2.)Is der ganze Aufbau sau kompliziert, erst eine Excel-Application-Instanz erstellen, dann die Datei öffnen, mit .Worksheets.Select() die Tabelle auswählen und so weiter...Außerdem hab ich eh mal auf MSDN gelesen, als ich mich darüber informiert habe, dass die Inerope Schnittstelle eh "outdated" ist, bzw Entwickler die nicht mehr verwenden sollen. Da du meiner Erfahrung nach, wenn du mit der Excel-Object-Libary 15 arbeitest und das ganze einem gibst, der 14 hat, er Probleme bekommt.
    Deswegen: Schau nächsten Punkt an ;D

    Balor schrieb:

    Gibt es auch nicht da kein Excel auf dem Server installiert ist

    Nimm lieber NPOI her. Da brauchste nur einen Rechner mit .NET + die Lib und du kannst alle Office-Dokumente bearbeiten ;D

    Lg Radinator

    PS: Hoffe ich konnte helfen
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Radinator schrieb:

    1.) Was genau erscheint dir seltsam?
    2.)Was sind deine Probleme?

    - Wenn man die Datei geöffnet hat, während mein Programm darüber läuft, liest er jede Zeile ohne Probleme ein.
    - Hat man einmal die Datei geöffnet und speichert ohne Änderungen, lässt sie sich jedes mal ohne Probleme auslesen.
    - Ein anderer "workaround" Währe eine weitere Zeile mit einem Insert Befehl einzufügen. Dann macht mir aber der "." von "Controll Rep." Probleme. Eine Möglichkeit diese Zelle vorher zu ändern

    Das Programm ist nur eines von mehreren Tasks die vom Server zu bestimmten Zeiten abgearbeitet werden. Also nicht direkt auf meinem Rechner.

    Balor schrieb:

    Wenn man die Datei geöffnet hat, während mein Programm darüber läuft, liest er jede Zeile ohne Probleme ein.

    Soll das etwa nicht so sein?

    Balor schrieb:

    Hat man einmal die Datei geöffnet und speichert ohne Änderungen, lässt sie sich jedes mal ohne Probleme auslesen.

    Selbe Frage wie oben

    Balor schrieb:

    Ein anderer "workaround" Währe eine weitere Zeile mit einem Insert Befehl einzufügen. Dann macht mir aber der "." von "Controll Rep." Probleme. Eine Möglichkeit diese Zelle vorher zu ändern

    Kannst ja auch versuchen mal mit DbParametern/DbConnectionStringBuilder oder dergleichen zu arbeiten...oder den Punk zu escapen. Gibt reichtlich Tuts im Inet, glaub auch hier im Forum hat EdR so ein Tut in Tips&Trickts..kann auch Sourcecodeaustausch sein. Musste einfach mal schauen.
    Bzw muss die Spalte wirklicj "Control Rep." heißen? oder kannst du den Punkt nicht einfach auch weglassen?
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Radinator schrieb:

    Balor schrieb:
    Wenn man die Datei geöffnet hat, während mein Programm darüber läuft, liest er jede Zeile ohne Probleme ein.


    Das soll damit heißen.
    Öffne ich die Datei in Excel und lasse mein Programm darüber laufen, funktioniert es. Da auf dem Server aber kein Excel installiert ist, muss ohne geöffnete Datei funktionieren.


    Radinator schrieb:

    Bzw muss die Spalte wirklicj "Control Rep." heißen? oder kannst du den Punkt nicht einfach auch weglassen?.

    Ja der Punkt "muss" leider sein, darauf habe ich keinen Einfluss und kommt von einem anderen Programm.

    Ich werde mal schauen ob ich etwas mit DbParametern erreichen kann, habe aber schon das Gefühl es wird nicht klappen, habe schon einige Versuche unternommen
    Wenn das ein 64-Bit-Server ist, wird er sicherlich auch Probleme mit dem Jet-Treiber haben.
    Eventuell solltest du mit einem aktuellen Treiber arbeiten.

    Auf connectionstrings.com kannst du nachschauen, welche Anbindungsmöglichkeiten es für Office gibt.
    Nur derzeit scheint die Seite offline zu sein.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --