2012-05-04 10 views
0

私はExcelシートからデータを読み込んで、それをdatagridviewに表示するVBプログラムを持っています。このプログラムの問題は、Excelファイルが開かれたが、Excelファイルが開かれていない場合、それはエラーレポートを与えた場合にのみ、vbが開いていないときにExcelファイルを読み込む方法

System.Data.OleDb.OleDbException: External table is not in the expected format. at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.OleDb.OleDbConnection.Open() at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) at mForm.Form1.Button1_Click(Object sender, EventArgs e) in D:\myWorld\projects\coffee\mForm\mForm\Form1.vb:line 16

があることがデータを読み取り、それを表示することができるということです開いていなくてもこのファイルから読み込むことができる方法?

`Try 
     Dim MyConnection As System.Data.OleDb.OleDbConnection 
     Dim DtSet As System.Data.DataSet 
     Dim MyCommand As System.Data.OleDb.OleDbDataAdapter 
     MyConnection = New System.Data.OleDb.OleDbConnection _ 
     ("Provider=Microsoft.Jet.Oledb.4.0; Data Source=" & Application.StartupPath & "\Staff Contracts.xlsx; Extended Properties=Excel 8.0") 
     MyCommand = New System.Data.OleDb.OleDbDataAdapter _ 
      ("select * from [Staff Contracts$A3:K14]", MyConnection) 
     MyCommand.TableMappings.Add("Table", "TestTable") 
     DtSet = New System.Data.DataSet 
     MyCommand.Fill(DtSet) 
     DataGridView1.DataSource = DtSet.Tables(0) 
     MyConnection.Close() 
    Catch ex As Exception 
     MsgBox(ex.ToString) 
    End Try` 

答えて

1

Excel 2007の接続文字列をExcel 2007ファイルとして使用しているようですが、これは私がデータを取得してデータグリッドビューに入れるコードです。このように接続文字列を使用してみてください:

var connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=""Excel 12.0;HDR=YES""" 

私はExcelファイルにサーバ側(インストールのMicrosoft Officeの必要はありません)を読み取るために、このコードを使用します。

Public Function getData(selectCmd As String, filePath as string) As System.Data.DataTable 
    Dim dataTable As New DataTable() 
    Using conn As New OleDbConnection(connString) 
     Dim adapter As New OleDbDataAdapter(selectCmd, conn) 
     adapter.Fill(dataTable) 
    End Using 
    Return dataTable 
End Function 
+0

ありがとうございました。ちょうど接続文字列を変更してすべてを完了しました。私は、マイクロソフトのインストールの必要性のための他のコードを試してみましょうが、すべて今は大丈夫です – ken

関連する問題