2012-10-08 18 views
11

Cómo leer los archivos xls y xlsx usando C# con formato OpenXML Sin usar la conexión OLEDB. Estoy buscando el procedimiento de formato Open XML.Cómo leer los archivos xls y xlsx usando C#

A continuación se muestra el código en el que utilicé el preocedure OLEDB. Pero estoy buscando el formato OpenXML.

public static DataTable ConvretExcelToDataTable(string FilePath) 
{ 
    string strConn = string.Empty; 

    if (FilePath.Trim().EndsWith(".xlsx")) 
    { 
     strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", FilePath); 
    } 
    else if (FilePath.Trim().EndsWith(".xls")) 
    { 
     strConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", FilePath); 
    } 

    OleDbConnection conn = null; 
    OleDbCommand cmd = null; 
    OleDbDataAdapter da = null; 
    DataTable dt = new DataTable(); 
    try 
    { 
     conn = new OleDbConnection(strConn); 
     conn.Open(); 
     cmd = new OleDbCommand(@"SELECT * FROM [Sheet1$]", conn); 
     cmd.CommandType = CommandType.Text; 
     da = new OleDbDataAdapter(cmd); 
     da.Fill(dt); 
    } 
    catch (Exception exc) 
    { 
     Console.WriteLine(exc.ToString()); 
     Console.ReadLine(); 
    } 
    finally 
    { 
     if (conn.State == ConnectionState.Open) 
      conn.Close(); 
     conn.Dispose(); 
     cmd.Dispose(); 
     da.Dispose(); 
    } 
    return dt; 
} 

requisito es llevar a cabo la conversión anterior en formato OpenXML . Gracias.

+0

XLS no es OpenXML. Por lo tanto, no puede usar OpenXML SDK para leer archivos XLS. Puede usarlo solo para archivos XLSX. –

+0

Respondí una pregunta similar recientemente [aquí] (http://stackoverflow.com/a/12746187/969613) – JMK

+0

Cualquier persona aclare mi duda en el comentario anterior. Gracias. –

Respuesta

3

Querrá el SDK OpenXml para el xlsx:

http://www.microsoft.com/en-gb/download/details.aspx?id=30425

Pero para la XLS, usted no será capaz de utilizar este formato XLS no está basado en XML.

que utilizan la biblioteca NPOI para acceder a los archivos más antiguos:

http://npoi.codeplex.com/

La biblioteca también soporta NPOI xlsx, por lo que este le daría una manera consistente de acceder a ellos. Lo malo es que tendrá que recorrer hojas, filas y columnas manualmente y crear el conjunto de datos que probablemente afectará el rendimiento si tiene grandes libros de trabajo. Si desea utilizar consultas para acceder a los datos, OLEDB es el único método que he encontrado.

2

Si tiene Excel instalado, puede usar Microsoft.Office.Interop.Excel;

http://support.microsoft.com/kb/302084

+2

En la máquina del Cliente, Excel puede no estar instalado. Esa es la razón principal, estoy buscando una solución alternativa como el formato OpenXML. Gracias. –

+0

buscando la misma solución –

+0

Esto es si está requiriendo que la hoja de cálculo se guarde inicialmente en un formato que no sea .xls, entonces no está realmente deseando leer una hoja de cálculo de Excel y hay soluciones más simples disponibles: bog standard csv . –

0

Retire \ de la cadena de conexión. Puedes dar como a continuación.

conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+filepath.ToString() + ";Extended Properties=Excel 12.0 Xml;"); 
Cuestiones relacionadas