2017-11-07 3 views
1

Ich versuche, eine Excel-Datei in mein Programm zu bringen, damit ich mit den Daten arbeiten und sie exportieren kann. Ich verwende die OleDB, um auf die Zugriffsdatei zuzugreifen, und versuche, sie an eine Datentabelle zu übergeben, damit ich sie in einem WinForm anzeigen und damit arbeiten kann. Hier ist der Code ich verwende:Importieren von Excel in ein Datagrid

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Data; 
using System.Data.SqlClient; 
using System.Data.OleDb; 
using System.Windows; 
using System.Windows.Forms; 
using System.Globalization; 
using System.Runtime.Versioning; 
using System.Threading; 

namespace DataImportServices 
{ 
    public class ExcelImport : IDataImport 
    { 
     public DataTable ImportData(OpenFileDialog openFile) 
     { 
      var dataTable = new DataTable(); 

      string query; 
      var hasHeaders = false; 
      var HDR = hasHeaders ? "Yes" : "No"; 
      string connectionString; 

      if (openFile.FileName.Substring(openFile.FileName.LastIndexOf(".")).ToLower() == ".xlsx") 
      { 
       connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + openFile.FileName + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\""; 
      } 
      else 
      { 
       connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openFile.FileName + ";Extended Properties=\"Excel 8.0;HDR=" + HDR + ";IMEX=0\""; 
      } 

      using (OleDbConnection cn = new OleDbConnection(connectionString)) 
      { 
       cn.Open(); 
       DataTable schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 
       DataRow schemaRow = schemaTable.Rows[0]; 
       string sheet = schemaRow["TABLE_NAME"].ToString(); 

       if (!sheet.EndsWith("_")) 
       { 
        query = "SELECT * FROM [" + openFile.FileName + "]"; 
        using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, cn)) 
        { 
         dataTable.Locale = CultureInfo.CurrentCulture; 
         dataAdapter.Fill(dataTable); //The error occurs here with a "" is not an acceptable. If I put a name ie "Data" it says its not an adorecord. 
        } 
       }     
      } 
      return (dataTable); 
     } 
    } 
} 

Der Fehler, ich bin zu verursachen, wenn ich versuche, die Datentabelle mit dem OleDBAdapter (dataadapter) zu füllen. Es wird eine Ausnahme ausgelöst, die nach einem ADODBrecordset fragt, obwohl eine Überschreibung nur für die DataTable erfolgt. Wie kann ich das umgehen? Oder fehlt mir etwas?

Vielen Dank im Voraus.

Antwort

0

könnten Sie lesen versuchen, Excel-Inhalte mit Exportierbare. Ist eine kleine Bibliothek, die ich vor einiger Zeit entwickelt habe und jetzt auf Nuget als OpenSource verbreitet wird.

Grundsätzlich können Sie eine Excel-Datei wie folgt lesen:

IImportEngine engine = new ExcelImportEngine(); 
var key = engine.AddContainer<DummyPersonWithAttributes>(); 
engine.SetDocument(pathToFile); //or MemoryStream instance 
var data = engine.GetList<DummyPersonWithAttributes>(key); 

Sie erhalten mehr Informationen könnten auf here

Verwandte Themen