0

Excelシートからデータを読み取り、データグリッドビューに表示するvbプログラムがあります。このプログラムの問題点は、Excel ファイルが開かれている場合にのみデータを読み取って表示できることですが、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`
4

1 に答える 1

1

It looks like you are using an Excel 2003 connection string for an Excel 2007 file. Try using a connection string like this:

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

I use this code to read excel files server side (no need for Microsoft Office Install):

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
于 2012-05-04T07:54:10.740 に答える