Seleccionar ciertas columnas con query de excel C#

publicado por: Anonymous

Tengo el siguiente query para seleccionar un documento de excel,

Select * From [Sheet1$]

Pero este excel tiene muchas columnas, y yo solo necesito las columnas A,C,E,G,Z,AA.

Intenté hacer lo siguiente, pero no funcionó

Select * From [Sheet1$A1:A,C1:C,E1:E,G1:G,Z1:Z,AA1:A]

Si me pudieran ayudar.
Gracias.

solución

Tenemos dos situaciones:

1. Las columnas no tienen nombre.

En este caso tenemos que especificarlo en la propiedad HDR HDR = NO

if (Path.GetExtension(pathArchivo).ToUpper() == ".XLSX")
{
         cb.Provider = "Microsoft.ACE.OLEDB.12.0";
         cb.Add("Extended Properties", "Excel 12.0 Xml;HDR=NO;IMEX=1;");
}

Y nos referimos a las columnas como F1, F2, Fn, etc. según las que necesitemos, por ejemplo, si solo necesitamos las columnas A (F1) y C (F3):

OleDbConnectionStringBuilder cb = new OleDbConnectionStringBuilder();
cb.DataSource = pathArchivo;

if (Path.GetExtension(pathArchivo).ToUpper() == ".XLS")
{
     cb.Provider = "Microsoft.Jet.OLEDB.4.0";
     cb.Add("Extended Properties", "Excel 8.0;HDR=NO;IMEX=1;");
}
else if (Path.GetExtension(pathArchivo).ToUpper() == ".XLSX")
{
     cb.Provider = "Microsoft.ACE.OLEDB.12.0";
     cb.Add("Extended Properties", "Excel 12.0 Xml;HDR=NO;IMEX=1;");
}

OleDbConnection conexionOleDb = new OleDbConnection(cb.ConnectionString);
conexionOleDb.Open();
OleDbCommand cmd = conexionOleDb.CreateCommand();



cmd.CommandText = "SELECT F1,"                               
                   + "F3 "
                   + "FROM [Sheet1$]";
OleDbDataReader dr = cmd.ExecuteReader();

2. Las columnas si tienen nombre

Colocamos la propiedad HDR = YES y especificamos el nombre de nuestras columnas, por ejemplo, la columna A se llama NOMBRE y la columna C se llama APELLIDO:

OleDbConnectionStringBuilder cb = new OleDbConnectionStringBuilder();
    cb.DataSource = pathArchivo;

    if (Path.GetExtension(pathArchivo).ToUpper() == ".XLS")
    {
         cb.Provider = "Microsoft.Jet.OLEDB.4.0";
         cb.Add("Extended Properties", "Excel 8.0;HDR=YES;IMEX=1;");
    }
    else if (Path.GetExtension(pathArchivo).ToUpper() == ".XLSX")
    {
         cb.Provider = "Microsoft.ACE.OLEDB.12.0";
         cb.Add("Extended Properties", "Excel 12.0 Xml;HDR=YES;IMEX=1;");
    }

    OleDbConnection conexionOleDb = new OleDbConnection(cb.ConnectionString);
    conexionOleDb.Open();
    OleDbCommand cmd = conexionOleDb.CreateCommand();



    cmd.CommandText = "SELECT NOMBRE,"                               
                       + "APELLIDO "
                       + "FROM [Sheet1$]";
    OleDbDataReader dr = cmd.ExecuteReader();
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *