//Lesen Sie die .xls Datei
string strConnection = "";
string FileName = Server.MapPath("Student.xls");
strConnection = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0; HDR=Yes;IMEX=1;'";
try
{
OleDbConnection conn1 = new OleDbConnection(strConnection);
conn1.Open();
DataTable dt = new DataTable();
dt = conn1.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });
Object sheetName = dt.Rows[0]["TABLE_NAME"];
dt.Clear();
dt.Columns.Clear();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + sheetName.ToString() + "]", conn1);
da.TableMappings.Add("Table", "0");
da.Fill(dt);
for (int i = 0; i < dt.Rows.Count; i++)
{
string ID = dt.Rows[i][0].ToString();
string Name = dt.Rows[i][1].ToString();
string City = dt.Rows[i][2].ToString();
string Marks = dt.Rows[i][3].ToString();
}
conn1.Close();
}
catch
{
throw;
}
//Um eine xlsx-Datei zu lesen, verwenden Sie den folgenden Code
string strConnection = "";
string FileName = Server.MapPath("Student.xlsx");
strConnection = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties='Excel 12.0 Xml;HDR={1};IMEX=1;'";
try
{
OleDbConnection conn1 = new OleDbConnection(strConnection);
conn1.Open();
DataTable dt = new DataTable();
dt = conn1.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });
Object sheetName = dt.Rows[0]["TABLE_NAME"];
dt.Clear();
dt.Columns.Clear();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + sheetName.ToString() + "]", conn1);
da.TableMappings.Add("Table", "0");
da.Fill(dt);
//int idx=0;
//int j=0;
for (int i = 0; i < dt.Rows.Count; i++)
{
string ID = dt.Rows[i][0].ToString();
string Name = dt.Rows[i][1].ToString();
string City = dt.Rows[i][2].ToString();
string Marks = dt.Rows[i][3].ToString();
}
conn1.Close();
}
catch
{
throw;
}
//Installieren Sie nun AccessDatabaseEngine.exe von "http://www.microsoft.com/en-us/download/confirmation.aspx?id=23734" Link
Es wird zu 100% funktionieren
13 Stimmen
Nur ein kurzer Kommentar: Die Verwendung von OLEDB zum Lesen einer Excel-Datei ist veraltete Technologie, sehr langsam und wie Sie festgestellt haben, erfordert das manuelle Installation von zusätzlichen Paketen auf Ihrem Zielrechner. (Zugegeben, die Frage wurde 2011 gestellt.) Verwenden Sie stattdessen ClosedXml (verfügbar auf NuGet), das sofort einsatzbereit ist.
7 Stimmen
@ShaulBehr Wäre schön gewesen, aber ClosedXml funktioniert nur für .xlsx-Dateien, nicht für .xls.
7 Stimmen
Wenn Sie in Sql Server importieren, können Sie diese Abfrage von SSMS ausführen:
execute master.dbo.xp_enum_oledb_providers
Es wird Ihnen sagen, welche Anbieter es denkt, die Sie haben. Es hat mir gesagt, dass ich sowohl Microsoft.ACE.OLEDB.16.0 als auch Microsoft.ACE.OLEDB.12.0 habe, aber als ich versuchte, Daten zu importieren, bekam ich dasselbe 'nicht auf Ihrem lokalen Rechner registriert', wie der OP, für beide Excel 16 und Excel 2007-Dateiformate (oledb.16.0 und oledb.12.0 entsprechend). Es macht Sinn, an diesem Punkt Ihre Verluste zu akzeptieren und auf die Microsoft-Software zu verzichten.1 Stimmen
Sehen Sie auch diese Antwort stackoverflow.com/a/14401857/21579 für den Unterschied zwischen Microsoft.Jet.OleDb und Microsoft.Ace.OleDb.
4 Stimmen
@user1040323,
execute master.dbo.xp_enum_oledb_providers
sagt Ihnen, was auf dem Server ist, nicht auf Ihrer lokalen Maschine.6 Stimmen
Hier das, was funktionieren sollte; - Es ist: Nicht wirklich dokumentiert, aber ich habe einen Weg gefunden, um sowohl die 32-Bit- als auch die 64-Bit-Versionen zu installieren. Fügen Sie einfach das Kommandozeilenargument "/passive" zum Befehl hinzu: "C:\Verzeichnispfad\AccessDatabaseEngine_x64.exe" /passive