czwartek, 17 grudnia 2009

Ładowanie excela przez OleDbConnection

Jak go podłączyć ? Poniżej prezentuje jak podpiąć sięprzy użyciu silnika do pliku i załadować jego arkusz do tabeli, oczywiście mapując nazwy kolumn.

Należy pamiętać o using System.Data.OleDb;

string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + src + @";Persist Security Info=False;Extended Properties=""Excel 12.0;HDR=YES;""";


OleDbConnection excelConnection = new OleDbConnection(connectionString);


excelConnection.Open();


 


DataTable dt = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);


List<string> excelSheets = new List<string>(dt.Rows.Count);


 


int i = 0;


foreach (DataRow row in dt.Rows)


{


    string strSheetTableName = row["TABLE_NAME"].ToString();


    excelSheets.Add(strSheetTableName.Substring(0, strSheetTableName.Length - 1));


    i++;


}


 


string strSQL = "SELECT * FROM [" + excelSheets[excelSheets.Count - 1] + "$]";


OleDbCommand dbCommand = new OleDbCommand(strSQL, excelConnection);


OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand);


DataTable dTable = new DataTable();


dataAdapter.Fill(dTable);


 


dTable.Dispose();


dataAdapter.Dispose();


dbCommand.Dispose();


excelConnection.Close();


excelConnection.Dispose();


 


 


for (int c = 0; c < dTable.Columns.Count; c++)


{


    dTable.Columns[c].ColumnName = GetColumnNameWithoutSpecialCharacters(dTable.Columns[c].ColumnName);


}









Użyłem tutaj metody GetColumnNameWithoutSpecialCharacters, bo kasuje wszystkie polskie znaczki , to ułatwia później prace na obiektach na które mapuje rekordy.

string GetColumnNameWithoutSpecialCharacters(string col)
{
col = col.ToUpper();
col = col.Replace("Ę", "E");
col = col.Replace("Ó", "O");
col = col.Replace("Ą", "A");
col = col.Replace("Ś", "S");
col = col.Replace("Ł", "L");
col = col.Replace("Ż", "Z");
col = col.Replace("Ź", "Z");
col = col.Replace("Ń", "M");
col = col.Replace("Ć", "C");
return col;
}

Finito!

Brak komentarzy:

Prześlij komentarz