System.Data.OleDb.OleDbException: Could not find installable ISAM

后端 未结 3 1348
悲哀的现实
悲哀的现实 2020-12-17 23:20

I have scoured the net, and found many people asking this, yet none have fixed my answer.

I have a Connection Class, and a Method that uses that Class in a page.

相关标签:
3条回答
  • 2020-12-17 23:54

    If you use more than 1 extended property then the value tokens must be quoted, otherwise there is no way for the driver to distinguish them from the other non-extended properties in the connection string;

    ...Extended Properties=""Excel 8.0;IMEX=1"""
    

    modify your connection string

    String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=pricelist.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES""");
    

    reference: Could not find installable ISAM

    0 讨论(0)
  • 2020-12-18 00:02

    please "Extended Properties" put it in ' '.

    That is, like the following statement:

    string connStr = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=pricelist.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES'")

    0 讨论(0)
  • 2020-12-18 00:10

    If you had installed LibreOffice look for cli_basetypes.dll, cli_cppuhelper.dll, cli_oootypes.dll, cli_uno.dll, cli_ure.dll, cli_uretypes.dll then add references to your project (to work with LibreOffice API's), I also installed "Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File Formats" and "Microsoft Access Database Engine 2010 Redistributable" (to get ACE.OLEDB.12.O connection without complete Office installation). This is a part of VB Sample in which I got the connection to oledb to create some queries.

        OpenFileDialog.Filter = "Spreadsheets (*.xls*)|*.xls*"
        OpenFileDialog.Multiselect = False
        Try
            If (OpenFileDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then
                objOffice = CreateObject("com.sun.star.ServiceManager") 'preparar instancia libreOffice (prepare libreOffice instance)
                instOffice = objOffice.createInstance("com.sun.star.frame.Desktop")
                Dim obj(-1) As Object
                Dim myDoc = instOffice.loadComponentFromURL("file:///" & OpenFileDialog.FileName.Replace("\", "/"), "_default", 0, obj)
                Dim hojas = myDoc.getSheets().getElementNames() 'Obtener nombres de las hojas de calculo (get Spreadsheet names)
                System.Threading.Thread.Sleep(1000) 'Esperar a que termine la instancia Office (await libreOffice thread)
                myDoc.Close(True)
    
                Dim MyConnection As System.Data.OleDb.OleDbConnection 'Preparar conexión para realizar consulta tipo sql (preparing connection)
                Dim DtSet As System.Data.DataSet
                Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
    
                If OpenFileDialog.FileName.ToUpper.Contains(".XLSX") Then
                    MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & OpenFileDialog.FileName & "';Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;'")
                Else
                    MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & OpenFileDialog.FileName & "';Extended Properties='Excel 12.0;HDR=YES;IMEX=1'")
                End If
    
    0 讨论(0)
提交回复
热议问题