úterý 19. února 2008

.NET a C#: Export/Import dat do/z Excelu

Ukládat data z Vaší aplikace do Excelu je velice výhodné, pokud je chcete předávat dál, prezentovat je apod. Na internetu se nachází mnoho řešení, z nich některá jsou velice robustní, ale znepřehledňují kód. Řešení, které zde nabízím, jsem našel na codeproject (zde) a líbí se mi jeho jednoduchost.
// vytvoreni DataGridu  - POZOR, pouzivame System.Web
System.Web.UI.WebControls.DataGrid grid = new System.Web.UI.WebControls.DataGrid();
grid.HeaderStyle.Font.Bold = true;

// tabulka byla v mem pripade typu DataTable - obecne zde muze byt jakykoliv DataSource
grid.DataSource = tabulka;
// velice dulezity radek - provede napojeni dat.
//Zde rozdil oproti bindovani v klasickych Win Forms
grid.DataBind();

// cesta, kam checeme soubor ulozit - ukladame na plochu
string cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
"test.xls");
// vyrenderovani DataGridu do souboru
using (StreamWriter sw = new StreamWriter(cesta))
{
using (HtmlTextWriter hw = new HtmlTextWriter(sw))
{
grid.RenderControl(hw);
}
}
Nezapomeňte přidat referenci na System.Web.

Pokud potřebujete data naopak převést z excelovské tabulky do DataTable, můžete použít tento kód:
private DataTable getDataFromXLS(string strFilePath)
{
try
{
string strConnectionString =string.Empty;
strConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source="+strFilePath+@";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""";
OleDbConnection cnCSV = new OleDbConnection (strConnectionString);
cnCSV.Open();
OleDbCommand cmdSelect = new OleDbCommand (@"SELECT * FROM [NazevPrvnihoListu$]", cnCSV);
OleDbDataAdapter daCSV = new OleDbDataAdapter();
daCSV.SelectCommand = cmdSelect;
DataTable dtCSV = new DataTable ();
daCSV.Fill(dtCSV);
cnCSV.Close();
daCSV = null;
return dtCSV;
}
catch(Exception ex)
{
return null;
}
}

Žádné komentáře:

Okomentovat