2016-01-30 5 views
0

Я попытался импортировать из Excel в набор данных и возникло сообщение об ошибке.Чтение данных в Excel в DataTable или Dataset

Я изучаю этот сайт http://vb.net-informations.com/excel-2007/vb.net_excel_oledb.htm

Imports System.Data 

Imports System.Data.SqlClient 

Public Class Form1 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Try 
      Dim MyConnection As System.Data.OleDb.OleDbConnection 
      Dim DtSet As DataSet 
      Dim MyCommand As System.Data.OleDb.OleDbDataAdapter 
      Dim Loc As String = Application.StartupPath() + "\Param\exceldata.xlsx" 
      Dim strCOleCon As String = "provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + Loc.Trim + "';Extended Properties=Excel 8.0;" 

      MyConnection = New OleDb.OleDbConnection(strCOleCon) 
      MyCommand = New OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection) 
      MyCommand.TableMappings.Add("Table", "TestTable") 
      DtSet = New DataSet 
      MyCommand.Fill(DtSet) 
      DataGridView1.DataSource = DtSet.Tables(0) 
      MyConnection.Close() 

     Catch ex As Exception 
      MsgBox(ex.ToString) 
     End Try 
    End Sub 

End Class 
+0

_error message happens_, поделитесь этим сообщением об ошибке? – Steve

ответ

0

U можно использовать EPPLUS третьей стороны, которая freeware.Which может импортировать первенствует файл в набор данных, а также имеет много functionallities манипулировать файл первенствовать

0

Прежде всего, я считаю, что ваше соединение неверно, у вас есть файл xlsx, но соединение установлено для xls.

BTW Не уверен, что это проект формы или asp, но обязательно выглядит как проект форм для окон, которые думают о вашем первом теге, указывающем asp.net.

Excel может быть сложным в отношении того, как строка соединения установки, вы хотите, чтобы просто читать, делает первый ряд на листе имена столбцов или данных, есть смешанные данные в столбце и т.д.

Вот отрывок я использовал, чтобы сделать вещи проще с подключением, но предупреждаю, что это не дурак доказательство в том, что вам необходимо установить HDR и IMEX правильно в связи

Imports System.Data.OleDb 

Module ExcelOleDbConnections 
    ''' <summary> 
    ''' Creates a connection string on read data from an excel file 
    ''' </summary> 
    ''' <param name="FileName"></param> 
    ''' <param name="Header">Yes if first row is column-names, No if first row is data</param> 
    ''' <param name="IMEX"></param> 
    ''' <returns></returns> 
    ''' <remarks> 
    ''' See following page for clarification on extended properties 
    ''' including IMEX. Ignore C# code. 
    ''' http://www.codeproject.com/Articles/37055/Working-with-MS-Excel-xls-xlsx-Using-MDAC-and-Oled 
    ''' </remarks> 
    <System.Diagnostics.DebuggerStepThrough()> _ 
    Public Function ExcelConnectionString(
     ByVal FileName As String, 
     Optional ByVal Header As String = "No", 
     Optional ByVal IMEX As Integer = 1) As String 

     Dim Builder As New OleDbConnectionStringBuilder 
     If IO.Path.GetExtension(FileName).ToUpper = ".XLS" Then 
      Builder.Provider = "Microsoft.Jet.OLEDB.4.0" 
      Builder.Add("Extended Properties", String.Format("Excel 8.0;IMEX={0};HDR={1};", IMEX, Header)) 
     Else 
      Builder.Provider = "Microsoft.ACE.OLEDB.12.0" 
      Builder.Add("Extended Properties", String.Format("Excel 12.0;IMEX={0};HDR={1};", IMEX, Header)) 
     End If 

     Builder.DataSource = FileName 

     Return Builder.ToString 

    End Function 
End Module 

Пример чтения листа, где первый строка - это данные. Обратите внимание, я использую дополнительные параметры, чтобы последние два использовать значения по умолчанию

Dim dt As New DataTable 

' sheet has data in first row 
Using cn As New OleDb.OleDbConnection With {.ConnectionString = ExcelConnectionString(Loc)} 
    Using cmd As New OleDb.OleDbCommand With {.Connection = cn, .CommandText = "select * from [Sheet1$]"} 
     cn.Open() 
     dt.Load(cmd.ExecuteReader) 
    End Using 
End Using 

В этом примере мы предполагаем, что первая строка являются имена полей/столбцов

Dim dt As New DataTable 

' sheet has column names for first row 
Using cn As New OleDb.OleDbConnection With {.ConnectionString = ExcelConnectionString(Loc, "Yes", 0)} 
    Using cmd As New OleDb.OleDbCommand With {.Connection = cn, .CommandText = "select * from [Sheet1$]"} 
     cn.Open() 
     dt.Load(cmd.ExecuteReader) 
    End Using 
End Using 

заселить DataGridView

If dt.Rows.Count > 0 Then 
    DataGridView1.DataSource = dt 
Else 
    ' 
    ' recover e.g. tell user there are no records in this sheet 
    ' 
End If 

Пример все вместе

Try 
    Dim Loc As String = IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Param\exceldata.xlsx") 
    If IO.File.Exists(Loc) Then 
     Dim dt As New DataTable 

     ' sheet has column names for first row 
     Using cn As New OleDb.OleDbConnection With {.ConnectionString = ExcelConnectionString(Loc, "Yes", 0)} 
      Using cmd As New OleDb.OleDbCommand With {.Connection = cn, .CommandText = "select * from [Sheet1$]"} 
       cn.Open() 
       dt.Load(cmd.ExecuteReader) 
      End Using 
     End Using 


     If dt.Rows.Count > 0 Then 
      DataGridView1.DataSource = dt 
     Else 
      ' 
      ' recover e.g. tell user there are no records in this sheet 
      ' 
     End If 
    End If 

Catch ex As Exception 
    MessageBox.Show("TODO") 
End Try 

См. Мои примеры форм окон (да, я вижу asp.net в ваших тегах) Excel and OleDb basics to advance operations