Excel tábla olvasása C#-ból
2007-05-26T12:00:43+02:00
2007-06-23T13:42:03+02:00
2022-07-27T17:07:37+02:00
GZolee79
Helloztok!

Látom több hasonló téma is van erről de az enyémre mégsem találtam megoldást.
Szóval az a helyzet, hogy Excel táblát kellene beolvasnom C#-ba Object Library használata nélkül.
Szóval mindenképp providerrel kellene.
Így nyitom meg:

static string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=C:\\hvginport.xls" + ";Extended Properties=Excel 8.0"; static string _strSheetRange; OleDbConnection ExcelConnection = new OleDbConnection(ConnectionString); ExcelConnection.Open();

szóvel ez jónak tűnik.

így kiválasztok egy Lapot meg egy cellatartományt:

//létrehzok egy string tömböt a lapok neveiből string _strSheetName; string _strSheetRange; string[] excelSheets = new string[dt.Rows.Count]; _strSheetName = excelSheets[0]; _strSheetRange = "A1:C5"; OleDbCommand SelectRange = new OleDbCommand( @"SELECT * FROM [" + _strSheetName + "$" + _strSheetRange + "]", ExcelConnection);

Eddig úgy néz ki megy is de a továbbiak nem nagyon.
(remélem jól sikerült bemásolnom a kódot :)
Szóval azt szeretném, hogy cellánként végiggyalogoljak az excel táblán és kiírni a cellatartalmat egy Console ablakba. Vagy bármit csinálni vele a lényeg, hogy cellánként menjen :)
Valami ötlet ? Előre is köszi
Mutasd a teljes hozzászólást!
Hali!

Úgy néz ki nagyjából sikerült megoldanom a problémát.
Egynelőre még nem teljesen ok mert csak soronként tudok mindent betölteni egy datatable-be. Így viszont elég lassú.
szóval a kód:

namespace ExcelReader { class Program { static string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=C:\\import.xls" + ";Extended Properties=Excel 8.0"; static string _strSheetRange; static string _strSheetName; static string[] excelSheets; static DataTable dt = null; static string ColName(int intCol) { string sColName = ""; if (intCol < 26) sColName = Convert.ToString(Convert.ToChar((Convert.ToByte((char)'A') + intCol))); else { int intFirst = ((int)intCol / 26); int intSecond = ((int)intCol % 26); sColName = Convert.ToString(Convert.ToByte((char)'A') + intFirst); sColName += Convert.ToString(Convert.ToByte((char)'A') + intSecond); } return sColName; } static void Main(string[] args) { OleDbConnection ExcelConnection = new OleDbConnection(ConnectionString); ExcelConnection.Open(); dt = ExcelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if (dt == null) excelSheets = null; //Az excel tábla lapjainak betöltése egy string tömbbe excelSheets = new String[dt.Rows.Count]; int i = 0; foreach (DataRow row in dt.Rows) { string strSheetTableName = row["TABLE_NAME"].ToString(); excelSheets[i] = strSheetTableName.Substring(0, strSheetTableName.Length - 1); Console.WriteLine(excelSheets[i]); i++; } //cellatartomány kiválasztása _strSheetName = excelSheets[0]; _strSheetRange = "A1:C5"; OleDbCommand SelectRange = new OleDbCommand( @"SELECT * FROM [" + _strSheetName + "$" + _strSheetRange + "]", ExcelConnection); OleDbDataAdapter oleAdapter = new OleDbDataAdapter(); oleAdapter.SelectCommand = SelectRange; dt = new DataTable("ExcelTable"); oleAdapter.FillSchema(dt, SchemaType.Source); oleAdapter.Fill(dt); Console.WriteLine(dt.Columns[0].Caption); ExcelConnection.Close(); oleAdapter = null; for (int r = 0; r <= dt.Rows.Count - 2; r++) { for (int c = 0; c <= dt.Columns.Count; c++) { } } Console.ReadLine(); } } }
Mutasd a teljes hozzászólást!

  • nem értek hozzá, de úgy láttam a keresőben volt már egy pár ehhez hasonló téma:
    Keresés - Prog.Hu
    Mutasd a teljes hozzászólást!
  • Hello!

    Néztem én ezeket, de olyat nem találtam ami nekem kell mert Microsoft object Libary-t használnak nem providert. :)
    De köszi.
    Mutasd a teljes hozzászólást!
  • Hali!

    Úgy néz ki nagyjából sikerült megoldanom a problémát.
    Egynelőre még nem teljesen ok mert csak soronként tudok mindent betölteni egy datatable-be. Így viszont elég lassú.
    szóval a kód:

    namespace ExcelReader { class Program { static string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=C:\\import.xls" + ";Extended Properties=Excel 8.0"; static string _strSheetRange; static string _strSheetName; static string[] excelSheets; static DataTable dt = null; static string ColName(int intCol) { string sColName = ""; if (intCol < 26) sColName = Convert.ToString(Convert.ToChar((Convert.ToByte((char)'A') + intCol))); else { int intFirst = ((int)intCol / 26); int intSecond = ((int)intCol % 26); sColName = Convert.ToString(Convert.ToByte((char)'A') + intFirst); sColName += Convert.ToString(Convert.ToByte((char)'A') + intSecond); } return sColName; } static void Main(string[] args) { OleDbConnection ExcelConnection = new OleDbConnection(ConnectionString); ExcelConnection.Open(); dt = ExcelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if (dt == null) excelSheets = null; //Az excel tábla lapjainak betöltése egy string tömbbe excelSheets = new String[dt.Rows.Count]; int i = 0; foreach (DataRow row in dt.Rows) { string strSheetTableName = row["TABLE_NAME"].ToString(); excelSheets[i] = strSheetTableName.Substring(0, strSheetTableName.Length - 1); Console.WriteLine(excelSheets[i]); i++; } //cellatartomány kiválasztása _strSheetName = excelSheets[0]; _strSheetRange = "A1:C5"; OleDbCommand SelectRange = new OleDbCommand( @"SELECT * FROM [" + _strSheetName + "$" + _strSheetRange + "]", ExcelConnection); OleDbDataAdapter oleAdapter = new OleDbDataAdapter(); oleAdapter.SelectCommand = SelectRange; dt = new DataTable("ExcelTable"); oleAdapter.FillSchema(dt, SchemaType.Source); oleAdapter.Fill(dt); Console.WriteLine(dt.Columns[0].Caption); ExcelConnection.Close(); oleAdapter = null; for (int r = 0; r <= dt.Rows.Count - 2; r++) { for (int c = 0; c <= dt.Columns.Count; c++) { } } Console.ReadLine(); } } }
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd