Permettre VB.NET application pour convertir des fichiers Excel à Datatable

My VB.NET app me permet actuellement de convertir des fichiers CSV à un datatable grâce au code fourni par David dans cette question j'ai posté: question précédente

maintenant j'essaie de permettre .Les fichiers XLSX à importer dans un datatable. Actuellement, le code ressemble à ceci:

Private Function ConvertCSVToDataTable(ByVal path As String) As DataTable
    Dim dt As DataTable = New DataTable()
    Using con As OleDb.OleDbConnection = New OleDb.OleDbConnection()
        Try
            If System.IO.Path.GetExtension(path) = ".csv" Then
                con.ConnectionString = String.Format("Provider={0};Data Source={1};Extended Properties=""Text;HDR=YES;FMT=Delimited""", "Microsoft.Jet.OLEDB.4.0", IO.Path.GetDirectoryName(path))
            ElseIf System.IO.Path.GetExtension(path) = ".xlsx" Then
                con.ConnectionString = String.Format("Provider={0};Data Source={1};Extended Properties=""Excel 12.0 XML;HDR=Yes;""", "Microsoft.ACE.OLEDB.12.0", IO.Path.GetDirectoryName(path))
            End If
            Using cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("SELECT * FROM " & IO.Path.GetFileName(path), con)
                Using da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(cmd)
                    con.Open()
                    da.Fill(dt)
                    con.Close()
                End Using
            End Using
        Catch ex As Exception
            Console.WriteLine(ex.ToString())
        Finally
            If con IsNot Nothing AndAlso con.State = ConnectionState.Open Then
                con.Close()
            End If
        End Try
    End Using
    Return dt
End Function

Toutefois, lorsque j'exécute le code à l'aide de l' .Fichier XLSX, je reçois l'erreur suivante:

{"le moteur de base de données Microsoft Office Access ne peut pas ouvrir ou écrire à le dossier "C:UsersXSLXFilePath". Il est déjà ouvert exclusivement par un autre utilisateur, ou vous devez avoir l'autorisation de consulter et d'écrire ses données."}

à ma connaissance, le fichier n'est ouvert nulle part ailleurs. Et l'application fonctionne aussi bien quand .Fichier CSV est mis par elle à la place. Comment faire pour que l'application fonctionne correctement ?XLSX, ou N'importe quel format de fichier Excel?

2
demandé sur AlanPear 2017-11-20 21:01:46

1 réponses

je pense que l'erreur est celle de la chaîne de connexion et de la commande OLEDB:

ConnectionString

vous ne devez pas utiliser IO.Path.GetDirectoryName(path) il renvoie le nom du répertoire, vous devez fournir le chemin complet du fichier:

con.ConnectionString = String.Format("Provider={0};Data Source={1};Extended Properties=""Excel 12.0 XML;HDR=Yes;""", "Microsoft.ACE.OLEDB.12.0", path)

Consulter ce lien pour excel connectionstring fonction de génération: importer des données à partir d'excel 2003 à dataTable

OLEDB Command

vous devez fournir le nom de la feuille de travail dans la commande au lieu du nom du fichier:

 Using cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("SELECT * FROM [Sheet1$]" , con)

si les noms de feuille est dynamique et vous devez obtenir la première feuille dans le fichier excel:

Dim dbSchema as DataTable = con.GetOleDbSchemaTable (OleDbSchemaGuid.Tables, null)

Dim firstSheetname as String = dbSchema.Rows(0)("TABLE_NAME").ToString
Using cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("SELECT * FROM [" & firstSheetname & "]" , con)

Références

0
répondu Hadi 2018-01-08 04:47:39