Excel-Datenverbindung mittels vb.net aufrufen und Daten aktualisieren

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von tragl.

    Excel-Datenverbindung mittels vb.net aufrufen und Daten aktualisieren

    Hallo,

    ich habe folgendes Problem: es gibt eine Datenbank, welche online auf einem Sharepoint hinterlegt ist. Eine direkte Verbindung zu diesem Sharepoint ist wegen Sicherheitssperren nicht möglich. Es gibt jedoch eine Alternative: auf einem PC in diesem Netzwerk kann man eine .xlsx-Datei abspeichern, welche die Verbindung zur Datenbank hält. Ich habe mir also nun die MyData.xlsx-Datei abgespeichert, welche eine "Verbindung" hat zum Sharepoint. Sobald ich die Datei also öffne werden die Daten vom Sharepoint abgerufen und in die Excel-Datei hinterlegt. Wenn ich die Excel-Datei dann abspeichere, habe ich den aktuellen Datensatz, mit dem ich arbeiten könnte.

    Mein Problem ist nun, dass ich die MyData.xlsx-Datei mittels oleExcelCommand in eine Datatable lade:

    VB.NET-Quellcode

    1. Dim sSheetName As String = ""
    2. Dim sConnection As String = ""
    3. Dim nOutputRow As Integer = 0
    4. Dim dtTablesList As System.Data.DataTable
    5. Dim oleExcelCommand As New OleDb.OleDbCommand
    6. Dim oleExcelConnection As New OleDb.OleDbConnection
    7. Dim XLSXPath As String = "C:\\Data\\MyData.xlsx"
    8. sConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + XLSXPath + ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"""
    9. oleExcelConnection = New OleDb.OleDbConnection(sConnection)
    10. oleExcelConnection.Open()
    11. dtTablesList = oleExcelConnection.GetSchema("Tables")
    12. If dtTablesList.Rows.Count > 0 Then
    13. sSheetName = dtTablesList.Rows(0)("TABLE_NAME").ToString
    14. End If
    15. dtTablesList.Clear()
    16. dtTablesList.Dispose()
    17. If sSheetName <> "" Then
    18. oleExcelCommand = oleExcelConnection.CreateCommand()
    19. oleExcelCommand.CommandText = "Select * From [" & sSheetName & "]"
    20. oleExcelCommand.CommandType = CommandType.Text
    21. Using da As New OleDb.OleDbDataAdapter(oleExcelCommand)
    22. DataTablePublication = New System.Data.DataTable
    23. da.Fill(DataTableTaTi)
    24. End Using
    25. End If
    26. oleExcelConnection.Close()



    Meine Frage ist nun, ob es möglich ist, mit dem Code den ich habe, eine Aktualisierung der Daten innerhalb der MyData.xlsx-Datei vorzunehmen? Falls ja wie? Falls es nicht möglich ist, gibt es überhaupt eine Alternative (ohne, dass der User die Datei aufmachen muss und abspeichern muss)?

    vielen lieben Dank für euren Input

    Verschoben. ~Thunderbolt
    cheers Kevin

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

    Interessante Idee - ich hab bislang nur Select-Commands gegen Excel abgefahren. Bliebe auszuprobieren, ob Insert, Delete, Update überhaupt möglich ist.
    Tja - probiers aus - am besten zunächst mit einem ExcelFile-Dummy.
    Probier zunächstmal ein Insert.

    Ansonsten definiere "Aktualisierung der Daten". Delete und Update - Befehle sind auf einen PrimaryKey angewiesen - ich bezweifel, dass Excel sowas bereitstellen kann.
    Naja - das könnte man evtl. auch umgehen, aber probier erstmal aus, ob OleDb überhaupt prinzipiell inserten kann.

    Empfehlung: Schreib eine eigene Methode dafür, und wenns Fragen dazu gibt, poste die - die ganze Methode.
    So verlorene Zeilen wie in post#1 sind recht unergiebig, um darübe zu reden.

    ErfinderDesRades schrieb:

    ich hab bislang nur Select-Commands gegen Excel abgefahren


    Ich geh' eher davon aus, dass eine Datenverbindung innerhalb der Excel-Datei zu einer anderen Excel-Datei existiert
    (das wäre zumindest eine gängige Methode - haben wir in der Firma auch sehr oft)


    @Springbok: Hab ich das richtig im Kopf? Wenn ja, dann müsstest du mal nachschauen, welche Commands ODBC zur Verfügung stellt, soweit ich mich erinnere arbeiten "Excel-Interne" Datenverbindungen
    damit. Dann müsstest du dir über Imports Microsoft.Office.Interop Excel nach VB.NET holen und darüber lässt sich bestimmt auch auf die Verbindung zugreifen. Weil das, was du im obigen
    Code machst, ist ja "einfach nur den Inhalt der Excel-Datei in eine DataTable laden" über OleDb
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Ok also ich hab das dann nun über Microsoft.Office.Interop.Excel gelöst.
    Ich öffne mittels Microsoft.Office.Interop.Excel meine Excel-Datei mit der Datenverbindung, aktualisiere dann alle Felder und speichere sie wieder ab. Code ist dieser:

    VB.NET-Quellcode

    1. Dim ExcelPath As String = "C:\\Data.xlsx"
    2. Dim xls As New Excel.Application
    3. Dim xlwb As Excel.Workbook
    4. xlwb = xls.Workbooks.Open(ExcelPath)
    5. xlwb.RefreshAll()
    6. xlwb.Save()
    7. xlwb.Close()


    Anschließend lade ich die Datei dann in meine DataTable ein und beginne mit der Verarbeitung.
    cheers Kevin