2011-05-04 29 views
15

Soy nuevo en C# y trato de leer un archivo XLSX en C# con el siguiente código:leer datos de XLSX en C#

string Connection = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=c:\\Temp\\source.xlsx;Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\";"; 

//code to read the content of format file 
OleDbConnection con = new OleDbConnection(Connection); 
OleDbCommand command = new OleDbCommand(); 

DataTable dt = new DataTable(); 
OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from [Tabelle1$]", con); 

myCommand.Fill(dt); 
Console.Write(dt.Rows.Count); 

consigo ta corregir el recuento de la salida, pero tengo 2 más preguntas:

1.¿Cómo se hace una declaración select where (cómo acceder a las filas)?

select * from [Tabelle1$] where A = '123' (A being an existing Excel row) 

generará un error mencionar parámetros incorrectos ...

2. puede alguien me suministra con un enlace tutorial o pequeña muestra cómo acceder a los datos?

+0

asegúrese de leer el tutorial unidos por Eugen muy bien. Te darás cuenta de por qué A = '123' no funciona (pero convertir HDR = No y escribir DONDE F1 = '123') – nantito

+0

Lo tengo para trabajar con F1, pero no entiendo por qué A no funciona, y cómo acceda a los nombres de tabla predeterminados ... –

+0

HDR expresa si hay una fila HeaDer. Si está configurado en "SÍ", significa que en lugar de haber configurado automáticamente "F1, F2 ...", tendrá la celda de la primera fila como un indicador del nombre de la columna. – nantito

Respuesta

19

Consulte el siguiente código de ejemplo:

private DataTable LoadXLS(string strFile, String sheetName, String column, String value) 
{ 
    DataTable dtXLS = new DataTable(sheetName); 

    try 
    { 
     string strConnectionString = ""; 

     if(strFile.Trim().EndsWith(".xlsx")) { 

      strConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", strFile); 

     } else if(strFile.Trim().EndsWith(".xls")) { 

      strConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", strFile); 

     } 

     OleDbConnection SQLConn = new OleDbConnection(strConnectionString); 

     SQLConn.Open(); 

     OleDbDataAdapter SQLAdapter = new OleDbDataAdapter(); 

     string sql = "SELECT * FROM [" + sheetName + "$] WHERE " + column + " = " + value; 

     OleDbCommand selectCMD = new OleDbCommand(sql, SQLConn); 

     SQLAdapter.SelectCommand = selectCMD; 

     SQLAdapter.Fill(dtXLS); 

     SQLConn.Close(); 
    } 

    catch (Exception e) 
    { 
     Console.WriteLine(e.ToString()); 
    } 

    return dtXLS; 

} 
+0

¿Esto funcionó para usted? –

+0

¿Dónde puedo descargar el proveedor de oledb? –

+3

Descargar desde http://www.microsoft.com/en-us/download/details.aspx?id=13255. ya sea 32 bits o 64 bits depende del sistema operativo. –