internal static DataTable VratTabulkuZExcelu(string cestaKExcelSouboru, string nazevListu)
{
OleDbDataAdapter odbaAdapter = new OleDbDataAdapter();
string connectString = VratConnectStringExcel(cestaKExcelSouboru);
OleDbConnection odbcPripojeni = new OleDbConnection(connectString);
OleDbCommand selectPrikaz = new OleDbCommand();
selectPrikaz.Connection = odbcPripojeni;
selectPrikaz.CommandText = "SELECT * FROM [" + nazevListu + "$]";
odbaAdapter.SelectCommand = selectPrikaz;
DataTable dtVyslednaTabulka = new DataTable();
try
{
odbcPripojeni.Open();
odbaAdapter.Fill(dtVyslednaTabulka);
}
catch (Exception e)
{
dtVyslednaTabulka = null;
}
finally
{
if (odbcPripojeni.State != ConnectionState.Closed)
{
odbcPripojeni.Close();
}
}
return dtVyslednaTabulka;
}
Connection string k pripojeni excelového souboru vypadá takto:Provider=Microsoft.Jet.OLEDB.4.0; Data Source = excelSoubor.xls; Extended Properties="Excel 8.0;HDR=YES; IMEX=1"
Data Source - úplná cesta k souboruHDR = YES - značí, že prní řádek obsahuje názvy sloupců a žádná data
IMEX = 1 - vždy číst data ze smíšených sloupců (sloupce obsahující čísla, datumy, řetězce...) jako textové řetězce. Může mít vliv na výkon.
Metoda na dynamické sestavení connection stringu:
public static string VratConnectStringExcel(string cestaKSouboru)
{
string jmenoSouboru = Path.GetFileName(cestaKSouboru);
string castPredCestou = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|";
string zaCestou = @"; Extended Properties=""Excel 8.0;HDR=YES;""";
string connectStringExcel = castPredCestou +jmenoSouboru
+ zaCestou;
return connectStringExcel;
}
Jo, jen pozor na 64bitech to nefunguje
OdpovědětVymazatDěkuji za poznámku. Každopádně "nefunguje" je dost obecný pojem, mohl bys to trošku upřesnit, na čem to přesně padá, nebo jak to vyřešit?
OdpovědětVymazat